//头文件
#ifndef LINK_STACK_H_INCLUDED
#define LINK_STACK_H_INCLUDED
typedef int SElemType;
typedef int Elemtype;
typedef int Status;
const int OVERFLOW(-2);
const int ERROR(0);
const int OK(1);
using namespace std;
// 链栈的存储结构
typedef struct StackNode
{
Elemtype data;
struct StackNode *next;
}StackNode,*LinkStack;
// 初始化链栈
Status IninStack(LinkStack &S)
{
//构造一个人空栈S,栈顶指针置空
S=NULL;
return OK;
}
// 入栈操作
Status Push(LinkStack &S, SElemType e)
{
LinkStack p;
//在栈顶插入元素e
p=new StackNode;
p->data=e;
p->next=S;
S=p;
return OK;
}
// 出栈操作
Status Pop(LinkStack &S,SElemType &e)
{
LinkStack p;
//删除S的栈顶元素,用e返回其值
if(S==NULL)
return ERROR;
e=S->data;
p=S;
S=S->next;
delete p;
return OK;
}
// 取栈顶元素
Status GetTop(LinkStack S,SElemType &e)
{
//返回S的栈顶元素,不修改栈顶指针
if(S!=NULL)
{
e=S->data;
return OK;
}
}
// 打印栈
void print_LinkStack(LinkStack S)
{
LinkStack p;
p=S;
cout<<" 当前链栈元素为(左栈顶,右栈底):";
while(p)
{
cout<<" "<<p->data;
p=p->next;
}
cout<<endl;
}
#endif // LINK_STACK_H_INCLUDED
//源文件
#include <iostream>
#include "Link_Stack.h"
using namespace std;
int main()
{
LinkStack S;
SElemType e,a[100];
int x=1,choose,n=0,i,i1;
while(x)
{
cout<<endl;
cout<<" - 顺序栈系统(链栈) -"<<endl;
cout<<" - -"<<endl;
cout<<" - 1.建栈 2.入栈 3.出栈 4.取栈顶元素 5 .打印栈 -"<<endl;
cout<<" - 6.退出 -"<<endl;
cout<<endl;
while(1)
{
cout<<" 输入你要进行的操作(1-6):";
cin>>choose;
if(choose==1) //创建新栈
{
if(IninStack(S))
{
cout<<" 建栈成功。"<<endl;
}
else
cout<<" 建栈失败。"<<endl;
break;
}
else if(choose==2) //批量入栈
{
cout<<" 入栈个数是:";
cin>>n;
for(i=0; i<n; i++)
{
cout<<" 请输入 入栈元素 :";
cin>>e;
if(Push(S,e))
{
cout<<" 入栈成功。"<<endl;
a[i]=e;
}
else
cout<<" 入栈失败。"<<endl;
}
cout<<" 入栈元素为(左先入):";
for(i1=0;i1<i;i1++)
{
cout<<" "<<a[i1];
}
cout<<endl;
break;
}
else if(choose==3) //批量出栈
{
cout<<" 出栈个数是:";
cin>>n;
for(i=0; i<n; i++)
{
if(Pop(S,e))
{
cout<<" 出栈成功。"<<endl;
a[i+49]=e;
}
else
cout<<" 出栈失败。"<<endl;
}
cout<<" 出栈元素为(左先出):";
for(i1=49;i1<i+49;i1++)
{
cout<<" "<<a[i1];
}
cout<<endl;
print_LinkStack(S);
break;
}
else if(choose==4) //提取栈顶元素
{
if(GetTop(S,e))
{
cout<<" 提取成功。"<<endl;
cout<<" 提取的栈顶元素:"<<e<<endl;
}
else
cout<<" 提取失败。"<<endl;
}
else if(choose==5) //打印顺序栈
{
print_LinkStack(S);
}
else if(choose==6) //退出系统
{
cout<<" 已退出系统。"<<endl;
x=0;
break;
}
}
}
return 0;
}