数据结构实验二顺序栈

#include<iostream.h>
const int StackSize=100;
template<class DataType>
class SeqStack
{public:
SeqStack(){top=-1;}
~SeqStack(){}
void Push(DataType x){if((top+1)==100) cout<<"空间已满!";top++;data[top]=x;}
DataType Pop(){DataType x;if(top==-1)cout<<"数据已空!";top--;x=data[top];return x;}
DataType GetTop(){if(top==-1) cout<<"数据已空!";else cout<<data[top]<<endl; return 0;}
int Empty(){if(top==-1) return 1;else return 0;}void Show(){for(int i=0;i<=top;i++) cout<<data[i]<<"  ";cout<<endl;}
private:
DataType data[StackSize];
int top;
};
int main()
{SeqStack<int> S;int i;void caidan();
do
{
caidan();cout<<"Please enter your chioce:";cin>>i;
switch(i)
{case 1:cout<<"please eneter the number you want to push:";
int n;cin>>n;S.Push(n);break;
case 2:S.Pop();break;
case 3:S.GetTop();break;
case 4:break;case 5:S.Show();break;
default:cout<<"enter error!"<<endl;}}while(i!=4);
return 0;}
void caidan()
{cout<<"1--入栈;"<<endl;
cout<<"2--弹栈;"<<endl;
cout<<"3--取栈顶;"<<endl;
cout<<"4--退出;"<<endl;
cout<<"5--显示."<<endl;}
这段代码的问题主要在于: 1. 在第2个case中,每次打开文件都需要进行文件查找,这样会影响程序的效率。 2. 在第3个case中,没有对栈为空的情况进行判断,如果栈为空,会出现错误。 3. 在第4个case中,当栈为空时,flag的值会被修改为-1,但是在第3个case中,却使用了flag来判断栈是否为空,这样会产生混淆。 以下是优化后的代码: ```c++ int main() { SqStack s; int choose, flag = 0; SElemType j, e, t; cout << "1.初始化\n"; cout << "2.入栈\n"; cout << "3.读栈顶元素\n"; cout << "4.出栈\n"; cout << "0.退出\n\n"; choose = -1; while (choose != 0) { cout << "请选择:"; cin >> choose; switch (choose) { case 1: if (InitStack(s)) { flag = 1; cout << "成功对栈进行初始化\n\n"; } else cout << "初始化栈失败\n\n"; break; case 2: { fstream file; file.open("SqStack.txt", ios::in); if (!file) { cout << "错误!未找到文件!\n\n" << endl; exit(ERROR); } if (flag) { flag = 1; cout << "进栈元素依次为:\n"; while (file >> j) { Push(s, j); cout << j << " "; } cout << endl << endl; } else cout << "栈未建立,请重新选择\n\n"; file.close(); } break; case 3:// 算法3.3 顺序栈的读取 if (!StackEmpty(s)) cout << "栈顶元素为:\n" << GetTop(s) << endl << endl; else cout << "栈中无元素,请重新选择\n" << endl; break; case 4:// 算法3.4 顺序栈出栈 if (!StackEmpty(s)) { cout << "依次弹出的栈顶元素为:\n"; while (Pop(s, t)) { flag = 1; cout << t << " "; } cout << endl << endl; } else cout << "栈中无元素,请重新选择\n" << endl; break; } } return 0; } ``` 优化后的代码主要做了以下改进: 1. 在第2个case中,只有在flag为1的情况下,才需要进行文件读取操作,这样可以减少文件查找的次数。 2. 在第3个case和第4个case中,都对栈是否为空进行了判断,避免了出现错误。 3. 在第4个case中,当栈不为空时,将flag的值修改为1,这样就不会与第3个case产生混淆。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值