#include<stdio.h>
#include <stdlib.h>
#include<malloc.h>
typedef char ElemType;
typedef struct linknode{
ElemType data; //数据域
struct linknode *next; //栈顶指针
}LinkStNode;
//初始化链栈
void InitStack(LinkStNode *&s){
s = (LinkStNode *)malloc(sizeof(LinkStNode));
s->next = NULL;
}
//销毁链栈
void DestroyStack(LinkStNode *&s){
LinkStNode *p = s->next;
while(p != NULL){
free(s); //释放结点
s = p; //s、p向后遍历
p = p->next;
}
free(s); //循环结束时,s指向尾结点
}
//判断栈是否为空
bool StackEmpty(LinkStNode *s){
return (s->next == NULL);
}
//进栈
void Push(LinkStNode *&s,ElemType e){
LinkStNode *p;
p = (LinkStNode *)malloc(sizeof(LinkStNode));
p->data = e; //新建元素e对应的结点p
p->next = s->next; //插入p结点作为开始结点
s->next = p;
}
//出栈
bool Pop(LinkStNode *&s,ElemType &e){
LinkStNode *p;
if (s->next == NULL) //栈空的情况
return false;
p = s->next; //p指向开始结点
e = p->data;
s->next = p->next; //删除p结点
free(p);
return true;
}
//取栈顶元素
bool GetTop(LinkStNode *s,ElemType &e){
if(s ->next == NULL)
return false;
e = s->next->data;
return true;
}
测试文件
#include"listack.cpp"
int main(){
ElemType e;
LinkStNode *s;
printf("1/初始化栈\n");
InitStack(s);
printf("栈为%s\n",(StackEmpty(s)?"空":"非空"));
printf("依次进栈元素为:1 2 3 4 5 \n");
Push(s,1);
Push(s,2);
Push(s,3);
Push(s,4);
Push(s,5);
printf("栈为%s\n",(StackEmpty(s)?"空":"非空"));
printf("出栈序列");
while(!StackEmpty(s)){
Pop(s,e);
printf("%d",e);
}
printf("/n");
printf("释放栈\n");
DestroyStack(s);
return 1;
}