栈的定义
链式栈的原理
特点: 插入和删除的操作只能在链表的表头进行;
栈顶:链表的表头;
栈底:链表的尾部;
1.链式栈的定义与创建
typedef int data_type;
typedef struct linkstack
{
data_type data;
struct linkstack *next;
}LinkStack;
LinkStack *createStack()
{
LinkStack *pTop=NULL;
pTop=(LinkStack *)malloc(sizeof(LinkStack));
if(NULL == pTop)
{
perror("malloc error");
return NULL;
}
memset(pTop,0,sizeof(LinkStack));
return pTop;
}
2.入栈
int PushLinkStack(LinkStack *pTop,data_type item)
{
LinkStack *pNew=(LinkStack *)malloc(sizeof(LinkStack));
if(pTop==NULL)
{
perror("malloc error");
return EMPTY;
}
pNew->data=item;
pNew->next=pTop->next;
pTop->next=pNew;
return OK;
}
3.出栈
int PopLinkStack(LinkStack *pTop,data_type *pData)
{
LinkStack *pDel=NULL;
pDel=pTop->next;
if(pTop == NULL)
{
perror("malloc error");
return EMPTY;
}
*pData=pDel->data;
pTop->next=pDel->next;
free(pDel);
pDel=NULL;
return OK;
}
4.显示
int Show(LinkStack *pTop)
{
if(NULL == pTop)
{
return NOEXIT;
}
LinkStack *pTemp=NULL;
pTemp=pTop;
while(pTemp->next!=NULL)
{
//if(pTemp->next == NULL)break;
pTemp=pTemp->next;
printf("%d ",pTemp->data);
}
printf("\n");
return OK;
}
4.主函数
#include "../include/linkstack.h"
void menu()
{
printf("2--------添加\n");
printf("2--------删除\n");
printf("3--------显示\n");
printf("0--------退出\n");
}
int main()
{
LinkStack *pTop =NULL;
pTop=createStack();
data_type item;
int op=0;
int res=0;
while(1)
{
menu();
printf("%d ",pTemp->data);
scanf("%d",&op);
if(0==op)
{
break;
}
switch(op)
{
case 1:
printf("请输入要添加的数:\n");
scanf("%d",&item);
res=PushLinkStack(pTop,item);
if(res==0)
{
printf("添加成功\n");
}
break;
case 2:
res=PopLinkStack(pTop,&item);
if(res==0)
{
printf("删除成功,删除的数是%d\n",item);
}
break;
case 3:
Show(pTop);
break;
}
}
}