#include<iostream>
using namespace std;
#define maxsize 100
typedef int selemtype;
typedef int status;
typedef struct
{
selemtype *base;
selemtype *top;
int stacksize;
}sqstack;
//顺序栈的初始化
status initstack(sqstack& s)
{
s.base = new selemtype[maxsize];
if (!s.base) exit(-1);
else
cout << "初始化成功" << endl;
s.top = s.base;
s.stacksize = maxsize;
return 1;
}
//入栈
status push(sqstack& s,int e)
{
if (s.top-s.base==s.stacksize)
return 0;
*s.top++=e;
return 1;
}
//出栈
status pop(sqstack& s, selemtype& e)
{
if (s.base == s.top) return 0;
e = *--s.top;
return 1;
}
//取栈顶元素
status gettop(sqstack &s)
{
if (s.base != s.top)
return *(s.top - 1);
}
//打印顺序栈
void print(sqstack s)
{
while (*s.top != *s.base)
{
cout << *--s.top << endl;
}
}
//置空顺序栈
void clearstack(sqstack &s)
{
s.top = s.base;
}
//判断顺序栈是否为空
int StackEmpty(sqstack s) {
if (s.top == s.base)
return 1;
else
return 0;
}
//求顺序栈的长度
int StackLength(sqstack s) {
return s.top - s.base;
}
int main()
{
sqstack s;
int n;
int a=0;
cout << "【******* 菜单 **********】"<<endl;
cout << "【******* 1、初始化 *****】" << endl;
cout << "【******* 2、入栈 *******】" << endl;
cout << "【******* 3、出栈 *******】" << endl;
cout << "【******* 4、取栈顶元素 *】" << endl;
cout << "【******* 5、打印顺序栈 *】" << endl;
cout << "【******* 6、置空顺序栈 *】" << endl;
cout << "【******* 7、判断是否为空*】" << endl;
cout << "【******* 8、顺序栈长度 *】" << endl;
while (cin >> n)
{
switch (n)
{
case 1:
initstack(s); break;
case 2:
{
int q=1;
a=a+1;
while(q)
{
cout << "请输入第"<<a<<"个元素:"<<endl;
break;
}
int n;
cin >> n;
push(s, n);
}
break;
case 3:
int e;
pop(s, e);
cout << "删除的元素为:" << e << endl;
cout << "删除之后的顺序栈为:"<<endl; print(s);
break;
case 4:
cout<<"栈顶元素为:"<<gettop(s)<<endl; break;
case 5:
cout << "顺序栈从上到下为:"<<endl;
print(s); break;
case 6:
clearstack(s);
cout << "顺序栈已置空!" << endl; break;
case 7:
if(StackEmpty(s))
cout << "顺序栈为空" << endl;
else
cout << "顺序栈不为空" << endl;
break;
case 8:
cout << "顺序栈的长度为:" << endl;
cout << StackLength(s) << endl;
break;
default:cout << "请输入1--5之间的编号????" << endl;
}
cout << "【******* 菜单 **********】" << endl;
cout << "【******* 1、初始化 *****】" << endl;
cout << "【******* 2、入栈 *******】" << endl;
cout << "【******* 3、出栈 *******】" << endl;
cout << "【******* 4、取栈顶元素 *】" << endl;
cout << "【******* 5、打印顺序栈 *】" << endl;
cout << "【******* 6、置空顺序栈 *】" << endl;
cout << "【******* 7、判断是否为空*】" << endl;
cout << "【******* 8、顺序栈长度 *】" << endl;
}
return 0;
}
顺序栈的初始化、入栈、出栈、取栈顶元素的一些练习。
最新推荐文章于 2024-08-13 09:16:27 发布