/*本程序是链式堆栈程序 数据结构-朱战立 第三版 第三章完整程序*/
/*环境 vs2013+win7*/
/*2018年8月17日 10:19:21*/
//这是一个链式堆栈的判空、压栈、出栈、取栈顶等操作
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define MaxSize 100
typedef int bool;
#define T 1
#define F 0
typedef int DataType;
typedef struct stack{
DataType data;
struct stack *next;
}ListStack;
//堆栈初始化
void ListStackInit(ListStack **stack) //输出型 2018年8月16日 14:35:35 更正
{
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 = NULL;*/
pTemp->next = stack->next;
stack->next = pTemp;
return 1;
}
//堆栈出栈
int ListStackPop(ListStack *stack, DataType *x)
{
ListStack *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)
{
ListStack *temp=stack->next;
if (temp==NULL)
{
return 0;
}
*n=temp->data;
return 1;
}
//链表销毁
void ListDestroy(ListStack *stack)
{
ListStack *pTemp, *del;
//if ((del = (ListStack*)malloc(sizeof(ListStack))) == NULL)
//{
// return 0;
//}
pTemp = stack;
//pTemp = pTemp->next; //2018年8月16日 14:35:09 更正
while (pTemp!=NULL)
{
del = pTemp;
pTemp = pTemp->next;
free(del); //2018年8月16日 08:59:48 出现中断?
del = NULL; //2018年8月16日 14:34:56 更正
}
/*stack->next = NULL;*/
}
//主函数
int main()
{
ListStack *head;
int i;
DataType m, x;
ListStackInit(&head);
for ( i = 0; i < 10; i++)
{
if ((ListStackPush(head, i + 1)) == 0)
{
printf("插入错误\n");
getchar();
return ;
}
}
ListStackTopPop(head, &m);
printf("栈顶=%d\n",m );
//for ( i = 0; i < 10; i++)
while (ListStackEmpty(head)!=0/*head.next!=NULL*/) //替换for循环在ListStackPop()中出现中断
{
if ((ListStackPop(head,&x)==0))
{
printf("取出错误\n");
getchar();
return;
}
else
{
printf("%d ", x);
}
}
ListDestroy(head);
getchar();
return 0;
}