这就是我到目前为止所做的事情,我在链表和堆栈方面都很陌生,所以它们让我感到困惑,我想弄清楚如何做我的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;
}
答案 0 :(得分: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;
}