gpt4 book ai didi

使用指针创建结构

转载 作者:太空宇宙 更新时间:2023-11-04 03:19:32 24 4
gpt4 key购买 nike

我正在开发一个程序,该程序创建一个具有添加和显示新节点功能的结构。我有一个名为“add”的函数,我用它来创建新节点并将它们发送到 struct->next 但每当我尝试运行我的函数“displayData”时,该函数都会说我的结构为 NULL/空。

这是代码。

    #include <stdio.h>
#include <stdlib.h>

typedef struct node *nodePtr;
struct node {
int item;
nodePtr next;
};
typedef nodePtr Statistician;

int input();
Statistician newStatistician(); //allocates memory to the structure. Dynamic allocation
void add(Statistician s, int x); //Adds data to the rear
void displayData(Statistician s); //prints entire dataset

int main() {

int operation, data;
Statistician s = NULL;

data = input(); //get new input
add(s,data); //run add function
displayData(s); //run display function
}

int input(){
int x;
printf("Enter data: ");
if (scanf("%d", &x) != 1)
{
printf("\n\nInvalid Input!\n\n");
exit(0);
}
return x;
}

Statistician newStatistician(){
Statistician newStat;
newStat = malloc(sizeof(struct node));
return newStat;
}

void add(Statistician s, int x){
Statistician newNode = newStatistician();
newNode->item = x;
newNode->next = NULL;
if(s == NULL){
s = newNode;
return;
}
while (s != NULL) {
s = s->next;
}
s->next = newNode;
}

void displayData(Statistician s){
Statistician temp = s;
if(s==NULL){
printf("\n\nList is EMPTY.");
printf( "\n\nPress any key.\n" );
getch();
return;
}
printf( "\n\nThe List:\n" );
while (temp != NULL) {
printf(" %d", temp->item);
temp = temp->next;
}

printf( "\n\nPress any key.\n" );
getch();
return;
}

当我使用 displayData 时,输出是。

       List is EMPTY

最佳答案

您必须通过引用传递头节点。否则更改列表的函数将处理头节点的副本,而不会更改原始头节点。

例如

void add(Statistician *s, int x)
{
Statistician newNode = newStatistician();
newNode->item = x;
newNode->next = NULL;

while ( *s != NULL ) s = &( *s )->next;

*s = newNode;
}

函数可以这样调用

add( &s, data );

关于使用指针创建结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47804037/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com