#include<iostream>
using namespace std;
//带头节点的单链表实现栈
struct LinkNode{
int data;
LinkNode *next;
};
//初始化栈
void InitStack(LinkNode *&S){
S=(LinkNode *)malloc(sizeof(LinkNode));
S->next=NULL;
}
//判断栈是否为空
void IsEmpty(LinkNode *&S){
if(S->next==NULL)
cout<<"栈为空"<<endl;
else
cout<<"栈不空"<<endl;
}
//入栈
void StackPush(LinkNode *&S,int value){
LinkNode *p=(LinkNode *)malloc(sizeof(LinkNode));
p->data=value;
p->next=S->next;
S->next=p;
}
//出栈
void StackPop(LinkNode *&S){
if(S->next==NULL){
cout<<"栈为空"<<endl;
return;
}
LinkNode *p=S->next;
S->next=p->next;
free(p); //释放要删除的节点的空间
}
//取栈顶元素
void GetTop(LinkNode *&S){
if(S->next==NULL){
cout<<"栈为空"<<endl;
return;
}
cout<<S->next->data<<endl;
}
int main(){
LinkNode *S; //定义一个栈
InitStack(S); //初始化栈
IsEmpty(S); //判断栈是否为空
StackPush(S,1); //入栈
StackPush(S,2);
StackPush(S,3);
StackPush(S,4);
StackPush(S,5);
StackPush(S,6);
GetTop(S); //取栈顶元素
StackPop(S); //出栈
GetTop(S); //取栈顶元素
StackPop(S); //出栈
GetTop(S); //取栈顶元素
StackPop(S); //出栈
GetTop(S); //取栈顶元素
StackPop(S); //出栈
GetTop(S); //取栈顶元素
StackPop(S); //出栈
GetTop(S); //取栈顶元素
StackPop(S); //出栈
GetTop(S); //取栈顶元素
StackPop(S); //出栈
IsEmpty(S); //判断栈是否为空
return 0;
}
带头节点的单链表实现栈
最新推荐文章于 2023-08-05 15:57:39 发布