gpt4 book ai didi

使用单链表与堆栈混淆

转载 作者:太空宇宙 更新时间:2023-11-04 04:33:07 25 4
gpt4 key购买 nike

这是我到目前为止所做的,我在链表和堆栈方面还很陌生,所以它们让我有些困惑,我正在尝试弄清楚如何执行我的 isempty 函数,它应该是如果为空则给我 1,如果不为空则给我 0。

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

typedef struct stack node;
typedef struct stack *link;

struct stack
{
int val;
link next;
};

// Global top variable
link top = NULL;


void push(int n)
{
link tmp;
tmp = malloc(sizeof(node));

tmp->val = n;
tmp->next = top;
top = tmp;
}

int pop()
{
int val = top->val;
link tmp = top;
top = top->next;
free(top);

return val;
}

int isempty()
{

}


void printstack()
{
link tmp = top;

while (tmp != NULL)
{
printf("%2d ", tmp->val);
tmp = tmp->next;
}
}

int main()
{
int x, i, j;
printf("Enter an integer: ");
scanf("%2d ", &x);

return 0;
}

最佳答案

首先似乎函数 pop 有错字

int pop()
{
int val = top->val;
link tmp = top;
top = top->next;
free(top);
^^^^^^^^^
return val;
}

必须有 free( tmp ) 而不是 free( top )

还应该检查函数内部的栈是否为空。

我觉得下面这样定义函数比较好

int pop( int *value )
{
int success;

if ( ( success = top != NULL ) )
{
*value = top->val;

link tmp = top;
top = top->next;
free( tmp );
}

return success;
}

至于函数isempty `那么它的实现很简单

int isempty()
{
return top == NULL;
}

关于使用单链表与堆栈混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33833204/

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