#include <iostream>
#include <stdlib.h>
using namespace std;
typedef char ElemType;
typedef struct linknode
{
ElemType data;
struct linknode *next;
} LiStack;
void InitStack(LiStack *L);//初始化栈
void DestroyStack(LiStack *L);//销毁栈
bool StackEmpty(LiStack *L);//判断栈是否为空
void Push(LiStack *L,ElemType e);//进栈
bool Pop(LiStack *L,ElemType &e);//出栈
bool GetTop(LiStack *L,ElemType &e);//取栈顶元素
int main()
{
LiStack *L=new LiStack();
cout<<StackEmpty(L)<<endl;
ElemType e;
InitStack(L);
Push(L,'a');
Push(L,'b');
// GetTop(L,e);
Pop(L,e);
cout<<e<<endl;
Pop(L,e);
cout<<e<<endl;
DestroyStack(L);
cout<<StackEmpty(L)<<endl;
return 0;
}
bool GetTop(LiStack *L,ElemType &e)//取栈顶元素
{
if(L->next==NULL)
return false;
else
{
e=L->next->data;
return true;
}
}
bool Pop(LiStack *L,ElemType &e)//出栈
{
LiStack *q=L->next;
if(L->next==NULL)
return false;
else
{
e=q->data;
L->next=q->next;
free(q);
return true;
}
}
void Push(LiStack *L,ElemType e)//进栈
{
LiStack *s=(LiStack*)malloc(sizeof(LiStack));
s->data=e;
s->next=L->next;
L->next=s;
}
bool StackEmpty(LiStack *L)//判断栈是否为空
{
return L->next==NULL;
}
void DestroyStack(LiStack *L)//销毁栈
{
LiStack *s=L->next;
while(L->next!=NULL)
{
free(L);
L=s;
s=L->next;
}
}
void InitStack(LiStack *L)//初始化栈
{
L=(LiStack*)malloc(sizeof(LiStack));
L->next=NULL;
}
链栈的优点是不存在栈满的情况。
栈的链式存储结构及其基本运算的实现
最新推荐文章于 2022-03-20 20:30:13 发布