gpt4 book ai didi

c - 链接列表项不会打印

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

这个程序应该以字符串的形式获取用户数据并将其放入链表中。现在我能够将数据放入链表中,但不确定为什么不打印出来。

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

// define the node of the stack
typedef struct node{
char name[100];
struct node *next;
}Node, *NodePtr;

// define the stack based on the linked list of nodes
typedef struct{
NodePtr top;
}StackType,*Stack;

// implement all the stack operations
Stack initStack(){
// allocate memory
Stack sp=(Stack)malloc(sizeof(StackType));
// set the top pointer to NULL
sp->top=NULL;
return sp;
}

int empty(Stack s){
return (s->top==NULL);
}


void push(Stack s, char *n){
NodePtr np= (NodePtr) malloc(sizeof(Node));
strcpy(np->name,n);
np->next=s->top;
s->top=np;
}

我认为 pop 函数某处有问题,但似乎无法弄清楚

//  pop the top element from the stack
char* pop(Stack s){
if(empty(s)){
printf("\n Error: Stack is empty");
return("err");
}
char hold[100];
strcpy(hold,s->top->name);
NodePtr temp=s->top;
s->top=s->top->next;
free(temp);
return hold;
}


int main(){
char n[100];
// create the stack
Stack s=initStack();

printf("Enter a list of names\n");
scanf("%s",&n);
while(strcmp(n,"end")!=0){
push(s,n);
scanf("%s",&n);
}

// print the stack
while(!empty(s))
printf("%s \n ", pop(s));

}

最佳答案

函数 pop 返回一个指向本地数组的指针,该数组变得无效,因为在退出该函数后该数组不存在。

当函数 pop 输出一些消息时,这也是一个坏主意。

按照下面的方式重写函数

int pop( Stack s, char *item )
{
int success = !empty( s );

if ( success )
{
strcpy( item, s->top->name );

NodePtr temp = s->top;
s->top = s->top->next;
free( temp );
}

return success;
}

并称它为

while ( pop( s, n ) )
{
puts( n );
}

关于c - 链接列表项不会打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42705151/

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