楼主,有几处代码不对,可以参考参考下面代码:
//这是一个链式堆栈的判空、压栈、出栈、取栈顶等操作
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define MaxSize 100
#define T 1
#define F 0
typedef int DataType;
typedef struct stack{
DataType data;
struct stack *next;
}ListStack;
//堆栈初始化
void ListStackInit(ListStack** stack)
{
if (((*stack) = (ListStack*)malloc(sizeof(ListStack))) == NULL)
{
exit(1);
}
(*stack)->next = NULL;
}
//堆栈判断是否为空
int ListStackEmpty(ListStack *stack)
{
if (stack->next == NULL)
{
return 0;
}
else
{
return 1;
}
}
//堆栈进栈
int ListStackPush(ListStack *stack, DataType x)
{
ListStack *pTemp;
if ((pTemp = (ListStack*)malloc(sizeof(ListStack))) == NULL)
{
return 0;
}
pTemp->data = x;
pTemp->next = stack->next;
stack->next = pTemp;
return 1;
}
//堆栈出栈
int ListStackPop(ListStack *stack, DataType *x)
{
ListStack *del;
del = stack->next;//赋值
if (del == NULL)
{
return 0;
}
stack->next = del->next;
*x = del->data;
free(del);
return 1;
}
//堆栈取出栈顶
int ListStackTopPop(ListStack *stack, DataType *n)
{
if (stack->next == NULL)
{
return 0;
}
else
{
*n = stack->next->data;
return 1;
}
}
//链表销毁
void ListDestroy(ListStack** stack)
{
ListStack *pTemp, *del;
pTemp = *stack;
pTemp = pTemp->next;
while (pTemp != NULL)
{
del = pTemp;
pTemp = pTemp->next;
free(del);
del = NULL;
}
free(*stack);
*stack = NULL;
}
//主函数
int main()
{
ListStack* head;
int x, i, m;
ListStackInit(&head);
for (i = 0; i < 10; i++)
{
if ((ListStackPush(head, i + 1)) == 0)
{
printf("插入错误\n");
getchar();
return 0;
}
}
ListStackTopPop(head, &m);
printf("栈顶=%d\n", m);
for (i = 0; i < 10; i++)
{
if ((ListStackPop(head, &x) == 0))
{
printf("取出错误\n");
getchar();
return 0;
}
else
{
printf("%d ", x);
}
}
free(head); //因为前面调用了ListStackPop函数,已经把一些元素释放掉内存了,所以这里直接调用free头就可以了。
head = NULL;
getchar();
return 0;
}