赞
踩
// 顺序栈的基本操作 #include <iostream> #include <fstream> using namespace std; #define OK 1 #define ERROR 0 #define OVERFLOW -2 #define MAXSIZE 50 // 存储空间的初始分配数量 typedef int Status; // 返回函数状态值 typedef char SElemType; // 元素类型 typedef struct { int stacksize; // 栈可用的最大容量 SElemType *base; // 栈底指针 SElemType *top; // 栈顶指针 }SqStack; // 初始化顺序栈 Status InitStack(SqStack &S) { //构造一个空栈S // 为顺序栈动态分配一个最大容量为MAXSIZE数组空间 S.base = new SElemType[MAXSIZE]; if (!S.base) // 存储空间分配失败 exit(OVERFLOW); S.top = S.base; // 将栈顶指针指向栈底,空栈 S.stacksize = MAXSIZE; // 设置栈的最大容量MAXSIZE return OK; } // 入栈 Status Push(SqStack &S, SElemType e) { // 插入元素e为新的栈的顶元素 if (S.top - S.base == S.stacksize) // 栈满 return ERROR; *(S.top++) = e; // 元素e压入栈顶,栈顶指针加1 return OK; } // 出栈 Status Pop(SqStack &S, SElemType &e) { // 删除S的栈顶元素,用e返回你要删除其值 if (S.base == S.top) // 栈空 return ERROR; e = *(--S.top); // 栈顶指针减1,将栈顶元素赋给e return OK; } // 获取顺序栈的栈顶元素 char GetTop(SqStack S) { // 返回S的栈顶元素,不修改栈顶指针 if (S.top != S.base) // 栈非空 return *(S.top - 1); // 返回栈顶元素的值,栈顶指针不变 } int main() { SqStack S; int choose, flag = 0; SElemType j, e, t; cout << "1.初始化栈 2.入栈 3.读取栈顶元素 4.出栈 0.退出\n\n"; choose = -1; while (choose != 0) { cout << "\n请选择0-4项:"; cin >> choose; switch (choose) { case 1: if (InitStack(S)) { flag = 1; cout << "顺序栈已初始化成功.\n"; } else cout << "顺序栈已初始化失败.\n"; break; case 2: { fstream file; file.open("SqStack.txt"); if (!file) { cout << "打开失败,请重新检查\n\n"; exit(ERROR); } if (flag) { cout << "进栈元素依次为:\n"; while (!file.eof()) { file >> j; if (file.fail()) break; else { Push(S, j); cout << j << " "; } } cout << "\n\n"; } else { cout << "栈未创建,请重新选择\n\n"; } file.close(); } break; case 3: if (flag != -1 && flag != 0) cout << "栈顶元素为:" << GetTop(S) << endl << endl; else cout << "栈中无此元素,请重新选择:\n\n\n\n"; break; case 4: cout << "依次出栈元素为:\n"; while (Pop(S, t)) { flag = -1; cout << t << " "; } cout << endl; break; } } return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。