c++实现顺序栈中的基本操作:
1、顺序栈的初始化
2、顺序栈的入栈
3、顺序栈的出栈
4、顺序栈的取值
5、顺序栈的判空
6、顺序栈的求长
7、顺序栈的清空
8、顺序栈的销毁
9、顺序栈的打印
注意:执行销毁顺序栈操作后,给栈分配的内存空间会被回收,无法再执行顺序栈的基本操作,所以在调用销毁顺序栈后面添加了“return0;”,停止运行程序。
代码实现:#includeusing namespace std; #define SElemType int//SElemType类型可根据实际情况自行设定 //*******************************顺序栈的存储结构******************************* #define Maxsize 100 typedef struct { SElemType* base;//栈底指针 SElemType* top;//栈顶指针 int stacksize;//栈可用的最大容量 }SqStack; //*****************************顺序表的基本操作函数***************************** //顺序栈的初始化 int InitStack(SqStack& S) { //构造一个空栈 S.base = new SElemType[Maxsize];//为顺序栈动态分配一个最大容量为Maxsize的数组空间 if (!S.base) exit(OVERFLOW);//存储分配失败 S.top = S.base;//栈顶指针等于栈底指针 S.stacksize = Maxsize; return 0; } //顺序栈的入栈 bool Push(SqStack& S, SElemType e) { if (S.top - S.base == Maxsize) return false;//栈满 *S.top++ = e;//相当于 S.top=e; top++; return true; } //顺序栈的出栈 bool Pop(SqStack& S,SElemType &e) { if (S.top == S.base) return false;//栈空 e = *--S.top;//相当于 --S.top; e=*S.top; return true; } //顺序栈的取值 bool GetTop(SqStack S, SElemType& e) { if (S.top == S.base) return false; e = *(S.top - 1); return true; } //*********************************顺序表的基本功能函数****************************** //1、入栈 void PushSqStack(SqStack& S) { SElemType e; bool flag; cout << "请输入入栈元素:" << endl; cin >> e; flag=Push(S, e); if (flag) cout << "入栈成功!" << endl; else cout << "栈满,入栈失败!" << endl; } //2、出栈 void PopSqStack(SqStack& S) { SElemType e; bool flag; flag=Pop(S, e); if (flag) cout << "出栈元素为:" << e << endl; else cout << "栈空,出栈失败!" << endl; } //3、取值 void GetTopSqStack(SqStack S) { SElemType e; bool flag; flag=GetTop(S, e); if (flag) cout << "取得的栈顶元素为:" << e << endl; else cout << "栈空,取栈顶元素失败!" << endl; } //4、判空 void StackEmpty(SqStack S) { if (S.top == S.base) cout << "栈空!" << endl; else cout << "栈未空!" << endl; } //5、求长 void StackLength(SqStack S) { cout << "顺序栈的长度为:" << S.top - S.base << endl; } //6、清空 void ClearStack(SqStack &S) { if (S.base) S.top = S.base; } //7、销毁 void DestoryStack(SqStack& S) { if (S.base) { delete[]S.base; S.stacksize = 0; S.top = S.base = NULL; } } //8、打印 void PrintStack(SqStack S) { SElemType* p = S.base; for (int i = 1; i <= S.top - S.base; i++) cout << "第" << i << "个元素为:" << *p++ << endl; } //菜单 void menu() { 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; cout << "***********************************0、退出*********************************" << endl; cout << "***************************************************************************" << endl; } int main() { SqStack S; int select; InitStack(S); while (1) { system("CLS");//清屏操作 menu(); cout << "请输入菜单序号:" << endl; cin >> select; switch (select) { case 1://入栈 PushSqStack(S); system("pause");//按任意键继续 break; case 2://出栈 PopSqStack(S); system("pause"); break; case 3://取栈顶元素 GetTopSqStack(S); system("pause"); break; case 4://判定栈是否为空 StackEmpty(S); system("pause"); break; case 5://计算栈的长度 StackLength(S); system("pause"); break; case 6://清空栈 ClearStack(S); system("pause"); break; case 7://销毁栈,销毁后会自动退出 DestoryStack(S); system("pause"); return 0; break; case 8://从栈底到栈顶遍历栈并打印 PrintStack(S); system("pause"); break; case 0: cout << "欢迎下次使用!" << endl;//退出 system("pause"); return 0; break; default: cout << "菜单序号输入有误!" << endl; system("pause"); break; } } system("pause"); return 0; }
参考资料:
《数据结构》(C语言版)严蔚敏
数据结构与算法基础(青岛大学-王卓)_哔哩哔哩_bilibili



