#includeusing namespace std; #define OK 1 #define ERROR 0 #define MAXSIZE 10 //顺序栈的最大存储空间 typedef int Status; //定义返回状态,方便阅读 typedef int numbre; //定义元素类型 typedef struct { numbre* base; //栈底指针 numbre* top; //栈顶指针 int length; //栈的最大长度 }sqstack;
在头文件部分,对栈的类型进行初始化定义
值得注意的是栈底指针可以不用定义,这时整个栈的操作将会与顺序表差不多。 - 注意文末
int main()
{
sqstack S; //定义栈
if (initstack(S) == OK) //初始化函数,并判断返回状态
cout << "栈创建成功!" << endl;
else cout << "栈创建失败!" << endl; //对返回状态进行判断,并给予反馈
menu(); //菜单函数
while (1) //在主循环里执行程序的选择,功能与菜单函数上所示对应
{
cout << "请输入选项:";
int c;
cin >> c; //对菜单进行选择操作
if (c == 1)
{
if (input(S) == ERROR) //入栈函数
cout << "进栈错误!" << endl;
else
cout << "进栈成功!" << endl;
}
else if (c == 2)
{
if (deletestack(S) == OK) //出栈函数
cout << "已出栈" << endl;
else
cout << "出栈失败!" << endl;
}
else if (c == 3) //返回当前栈顶元素
cout << "当前栈顶元素为:" << gettop(S) << endl;
else if (c == 4)
{
if (judgment(S) == OK) cout << "栈为空!" << endl;//判断栈是否为空
else
cout << "栈不为空!" << endl;
}
else
cout << "选项错误!" << endl;
}
return 0;
}
在主函数里对实现函数进行调用,并且判断实现函数是否,完成并反馈情况。
三.实现函数 (1)初始化Status initstack(sqstack& S)
{
S.base = new numbre[MAXSIZE]; //空间分配
if (!S.base) return ERROR;
S.top = S.base;
S.length = MAXSIZE;
return OK;
}
在初始化函数中首先对S进行空间分配,然后对分配空间进行判断,如果分配成功继续操作,如果分配失败返回ERROR。成功后将top与base指向同一个栈点,并且设置栈的最大存储。
(2)入栈Status input(sqstack& S)
{
int n, e;
cout << "请输入元素个数:";
cin >> n;
if (S.top - S.base == S.length) return ERROR;
if (n > S.length) return ERROR;
cout << "请输入元素:";
for (int i = 0; i < n; i++)
{
cin >> e;
//*S.top++ = e; //这个操作与下面两行实质上是一样的
*S.top=e; //从右开始运算
S.top++;
}
return OK;
}
在第一个if中判断当前栈是否为满,第二个if判断输入元素数量是否超出最大存储。进入循环开始将元素压入栈,并且向前移动栈顶指针。
(3)出栈Status deletestack(sqstack& S)
{
if (S.top == S.base) return ERROR;
cout << *(S.top - 1); //输出出栈元素
S.top--; //栈顶指针后移
return OK;
}
将栈顶元素输出,然后将栈顶指针向后移动一位
(4)获取栈顶元素numbre gettop(sqstack S)
{
if (S.top != S.base)
return *(S.top - 1);
return 0;
}
与删除操作类似,只是不对指针进行操作。
(5)判断栈是否为空Status judgment(sqstack S)
{
if (S.top == S.base)
return OK;
return ERROR;
}
如果栈顶与栈底指针指向同一个位置,那么返回OK代表栈为空。
本篇文章为一次实验报告要求的内容,已经进行了运行测试。本人正在学习,如果有什么问题欢迎讨论斧正。(希望老师如果看到,能了解我的实验并不是在网上抄的啊)
F_NCIAE_A231_2022/3/16



