#双栈初始化##判断栈空,栈满,进栈和出栈
将编号为0和1的两个栈存放于一个数组空间V[m]中,栈底分别处于数组的两端。当第0号栈的栈顶指针top[0]等于-1时该栈为空;当第1号栈的栈顶指针top[1]等于m时,该栈为空。两个栈均从两端向中间增长。试编写双栈初始化,判断栈空、栈满、进栈和出栈等算法的函数。
#include
using namespace std;
typedef struct {int top[2], bot[2];int *V;int m;
}DblStack;
void ShowMenu() {cout << "************下面我们开始设计双栈************" << endl;cout << "****************0.双栈初始化****************" << endl;cout << "****************1.插入数据******************" << endl;cout << "****************2.删除数据******************" << endl;cout << "****************3.打印数据******************" << endl;cout << "****************本实验仅进行一次************" << endl;
}
//初始化一个大小为m的双向栈
void InitDblStack(DblStack &S) {cout << "请输入双栈的大小" << endl;cin >> S.m;//动态分配一个最大容量为m的数组空间S.V = new int[S.m];//左栈栈底指针S.bot[0] = -1;//右栈栈底指针S.bot[1] = S.m;//左栈栈顶指针S.top[0] = -1;//右栈栈顶指针S.top[1] = S.m;system("pause");system("cls");
}
//向指定的i号栈中插入元素
void DblPush(DblStack &S) {int i = 0;int j = 0;int flag=0;int *x = new int();cout << "请输入您要插入数据的栈号" << endl;cin >> i;//判断栈号是否输入错误if (i < 0 || i>1) cout << "栈号输入错误" << endl;//向0栈插入数据,反之向1栈插入数据if (i == 0) {cout << "您要在此栈插入数据的个数" << endl;cin >> j;for (int t = 0;t < j;t++) {cout << "插入第" << (t + 1) << "个数" << endl;cin >> *x;//判断栈是否已满if (S.top[0] + 1 == S.top[1]) {cout << "双栈已满,无法再继续添加数据" << endl;flag=1;}elseS.V[++S.top[0]] = *x;if(flag==1)break;}}else {cout << "您要在此栈插入数据的个数" << endl;cin >> j;for (int t = 0;t < j;t++) {cout << "插入第" << (t + 1) << "个数" << endl;cin >> *x;if (S.top[0] + 1 == S.top[1]){cout <<"双栈已满,无法插入该数据" << endl;flag=1;}elseS.V[--S.top[1]] = *x;if(flag==1) break;}}delete x;system("pause");system("cls");
}//删除指定的i号栈的栈顶元素,用x返回其值
void DblPop(DblStack &S){int i,j;cout << "您需要删除哪号栈的栈顶元" << endl;cin >> i;cout << "您需要删除几个数" << endl;cin >> j;for (int t = 0;t < j;t++) {if (S.top[i] == S.bot[i]){cout << "该栈已为空栈" << endl;break;}if (i == 0)S.V[S.top[0]--];elseS.V[S.top[1]++];}system("pause");system("cls");
}
void PrintDblStack(DblStack &S) {if (S.top[0] == S.bot[0])cout << "第0栈为空栈。无法打印" << endl;else {cout << "第0栈的数据" << endl;for (int i = 0; i < S.top[0] - S.bot[0];i++){cout << S.V[i];cout << " \t";}cout << endl;}if (S.top[1] == S.bot[1])cout << "第1栈为空栈。无法打印" << endl;else {cout << "第1栈的数据" << endl;for (int i = S.m;i > S.top[1];i--){cout << S.V[i - 1];cout << "\t";}cout << endl;}//本实验打印后就退出system("pause");exit(0);
}
int main() {DblStack S;int i;while (1) {ShowMenu();cout << "请选择你的操作" << endl;cin >> i;switch(i){case 0:{//初始化双向栈InitDblStack(S);break;}case 1:{//给栈添加数据DblPush(S);break;}case 2:{//删除栈中数据DblPop(S);break;}case 3:{//打印数据PrintDblStack(S);break;}default:break;}}}
}
本代码仅是为了完成数据结构的作业,所以还不完善,见谅。
。。。。。。。。
其实是敲不动了
。。。。。。。。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!