#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
using namespace std;
#define ElemType int
#define MAXSIZE 100
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef struct Lnode{
ElemType data;
struct Lnode *next;
}LinkStNode,*LinkStack;
//初始化
void InitStack(LinkStack &s){
s=new Lnode;
s->next=NULL;
}
//销毁
void DestroyStack(LinkStack &s){
LinkStack pre,p;
pre=s;
p=s->next;
while(p!=NULL){
delete pre;
pre = p;
p=pre->next;
}
delete pre;
}
//判断是否为空
bool StackEmpty(LinkStack s){
return (s->next==NULL);
}
//进栈
void Push(LinkStack &s){
LinkStack p;
cout<<"请输入你要入栈的元素个数:";
int number;
cin>>number;
int i;
for(i=0;i<number;i++){
p=new Lnode;
cout<<"请输入第"<<i+1<<"个元素:";
ElemType elem;
cin>>elem;
p->data=elem;
p->next=s->next;
s->next=p; //将新结点插入作为首结点
}
}
//出栈
bool Pop(LinkStack &s){
LinkStack p;
if(s->next==NULL){
return false;
}
p=s->next;
ElemType elem =p->data;
cout<<"栈顶元素"<<elem<<"被出栈。";
s->next=p->next;
delete p;
return true;
}
//取栈顶元素
ElemType GetTop(LinkStack s){
if(s->next==NULL){
cout<<"此栈为空栈。";
}
ElemType elem=s->next->data;
return elem;
}
int main(){
LinkStack s;
InitStack(s);
Push(s);
cout<<endl;
bool flag=StackEmpty(s);
if(flag){
cout<<"此栈为空。"<<endl;
} else{
cout<<"此栈非空。"<<endl;
}
cout<<endl;
ElemType elem=GetTop(s);
cout<<"栈顶元素为:"<<elem<<endl;
cout<<endl;
Pop(s);
cout<<endl;
elem=GetTop(s);
cout<<"栈顶元素为:"<<elem<<endl;
cout<<endl;
}
(数据结构)(C++)链栈的建立和部分基本操作
于 2023-07-06 15:16:08 首次发布