📄 shiyan1.cpp
字号:
#include <stdio.h>
#include <stdlib.h>
#include <iostream.h>
typedef struct StackNode
{
int data; // 存 放 数 据
struct StackNode * next; // 指 向 下 一 个 结 点
}StackNode;
typedef struct
{
StackNode * top; // 栈 顶 指 针
}LinkStack;
//=========================================函-数-原-型-声-明======================================
void InitStack(LinkStack &S); // 栈 的 初 始 化
void Push(const int &item,LinkStack &S); // 入 栈
char Pop(LinkStack &S); // 出 栈
void GetTop(LinkStack &S); // 取 栈 顶 元 素
int IsEmpty(LinkStack &S); // 判 断 栈 是 否 为 空
void MakeEmpty(LinkStack &S); // 清 空 栈
//=========================================栈-的-初-始-化=========================================
void initstack(LinkStack &S)
{
S.top=NULL;
cout<<"成功初始化栈\n";
}
//=========================================入-栈==================================================
void Push(const int &item,LinkStack &S)
{
StackNode *t=(StackNode *) malloc(sizeof(StackNode));
t->next=S.top;
t->data=item;
S.top=t;
}
//=========================================出-栈==================================================
int Pop(LinkStack &S,int &e)
{
if(S.top==NULL)
return 0;
else
{
e=S.top->data;
S.top=S.top->next;
return 1;
}
}
//=========================================判-断-栈-是-否-为-空===================================
int IsEmpty(LinkStack S)
{
return S.top==NULL;
}
//=========================================取-栈-顶-元-素=========================================
void GetTop(LinkStack &S)
{int e;
if(S.top==NULL)
cout<<"取栈顶元素失败,该栈为空";
else
{e=S.top->data;
cout<<"取栈顶元素成功,该栈顶元素为:e="<<e;
}
}
//=========================================清-空-栈===============================================
void MakeEmpty(LinkStack &S)
{
StackNode *p;
while(S.top!=NULL)
{
p=S.top;
S.top=S.top->next;
free(p);
}
}
//=========================================mian()-函-数===========================================
void main()
{
LinkStack S;
int item;
int m;
int n;
cout<<"\t*******************栈-的-操-作-管-理-菜-单**********\n\n\t";
cout<<"*******************1、栈-的-初-始-化****************\n\t";
cout<<"*******************2、入-栈*************************\n\t";
cout<<"*******************3、出-栈*************************\n\t";
cout<<"*******************4、取-栈-顶-元-素****************\n\t";
cout<<"*******************5、清-空-栈**********************\n\t";
cout<<"*******************6、判-断-栈-是-否-为-空**********\n\t";
cout<<"*******************7、退-出-程-序*******************\n\t";
cout<<"*******************8、清-屏*************************\n";
cout<<"请-选-择-您-要-进-行-的-操-作:\n";
a: cin>>n;
switch (n)
{case 1: initstack(S);
cout<<"\n";
goto a; break;
case 2:{cout <<"\t请输入栈元素的个数:m=";
cin>>m;
cout<<"请依次输入入栈元素,按空格间隔\n";
for(int i=1;i<=m;i++)
{
cin>>item;
Push(item,S);
if(m==i) cout<<"入栈成功\n请-选-择-您-要-进-行-的-操-作:\n";
}
cout<<"\n";
goto a; break;
}
case 3:cout<<"出栈元素依次为:";
if(S.top==NULL) cout<<"对不起,该栈为空!\n请-选-择-您-要-进-行-的-操-作:\n";
while(S.top!=NULL)
if(Pop(S,item)==1)
cout<<" "<<item;
cout<<"\n\n";
goto a; break;
case 4: GetTop(S);cout<<"\n\n";
goto a; break;
case 5:MakeEmpty(S); cout<<"栈已经被清空\n请-选-择-您-要-进-行-的-操-作:\n\n";
goto a; break;
case 6:
if(S.top==NULL)
cout<<"栈S已经为空\n";
else
cout<<"栈S不为空\n";
cout<<"\n";
goto a; break;
case 7:break;
case 8:system("cls");
goto a; break;
default :
cout<<"操作错误,请重新选择\n";
cout<<"\n";
goto a;
}
cout<<"\n";
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -