用数组存两个栈
来源:互联网 发布:淘宝小额交易避免封号 编辑:程序博客网 时间:2024/05/10 02:59
#define _FUNC_H
#include<iostream>
using namespace std;
#define TRUE 1
#define FASLE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW_s -2
typedef int Status;
typedef int ElemType;
typedef struct
{
ElemType *base;//栈底
ElemType *top;//栈顶
int stacksize;
}SqStack;
extern void InitStack(SqStack &S1,SqStack &S2);//构造一个空栈
extern Status DestroyStack(SqStack &S);//销毁栈
extern Status ClearStack(SqStack &S);//清空栈
extern Status StackEmpty(SqStack S);
int StackLength(SqStack S);
extern Status GetTop(SqStack S,ElemType &e);//取栈顶元素
extern Status Push(SqStack &S,ElemType e);//栈顶插入元素
extern Status Pop(SqStack &S,ElemType &e);//删除栈顶元素
void StackTraverse(SqStack S);//遍历栈
#endif
#include<iostream>
#include"date.h"
using namespace std;
//构造一个空栈
int a[MAX];
void InitStack(SqStack &S1,SqStack &S2)
{
S1.base=&a[0];
S2.base=&a[MAX-1];
S1.top=S1.base;
S2.top=S2.base;
S1.stacksize=MAX;
S2.stacksize=MAX;
}
//销毁栈
Status DestroyStack(SqStack &S)
{
ElemType e;
while(S.top!=S.base)
{
Pop(S,e);
}
return OK;
}
//清空栈
Status ClearStack(SqStack &S)
{
if(S.top!=S.base)
{
S.top=S.base;
}
return OK;
}
//置空栈
Status StackEmpty(SqStack S)
{
if(S.top==S.base)
{
return TRUE;
}
else
{
return FASLE;
}
}
//求栈的长度
int StackLength(SqStack S)
{
int length;
if(S.top!=S.base)
{
length=S.top-S.base;
return length;
}
else
{
return ERROR;
}
}
//取栈顶元素
Status GetTop(SqStack S,ElemType &e)
{
if(S.top==S.base)
{
return ERROR;
}
else
{
e=*(S.top-1);
return OK;
}
}
//栈顶插入元素
Status Push(SqStack &S,ElemType e)
{
if(S.top-S.base>MAX/2)
{
return OVERFLOW_s;
}
else
{
*S.top++=e;
return OK;
}
}
//删除栈顶元素
Status Pop(SqStack &S,ElemType &e)
{
if(S.top!=S.base)
{
e=*--S.top;
return OK;
}
else
{
return ERROR;
}
}
//遍历栈
void StackTraverse(SqStack S)
{
int i,length=S.top-S.base;
for(i=1;i<=length;i++)
{
cout<<*S.base++<<" ";
}
cout<<endl;
}
#include"date.h"
using namespace std;
int length1,length2;
SqStack S1,S2;
int main()
{
int i, select,n;
ElemType e;
InitStack(S1,S2);
cout << "请输入栈S1的长度:" << endl;
cin >> length1;
for (i = 1; i <= length1; i++)
{
cin >> n;
Push(S1, n);
}
cout << "请输入栈S2的长度:" << endl;
cin >> length2;
for (i = 1; i <= length2; i++)
{
cin >> n;
Push(S2, n);
}
StackTraverse(S1);
StackTraverse(S2);
{
cout << "1.求栈S1的长度" << endl;
cout << "2.求栈S2的长度" << endl;
cout << "3.取S1栈顶元素" << endl;
cout << "4.取S2栈顶元素" << endl;
cout << "5.S1栈顶插入元素" << endl;
cout << "6.S2栈顶插入元素" << endl;
cout << "7.删除S1栈顶元素" << endl;
cout << "8.删除S2栈顶元素" << endl;
cout << "9.遍历栈S1" << endl;
cout << "10.遍历栈S2" << endl;
cout << "11.结束!" << endl;
cout << "请选择!" << endl;
cin >> select;
switch (select)
{
case 1:
if (StackLength(S1) == ERROR)
{
cout << "栈为空!" << endl;
}
else
{
cout << "length1=" << StackLength(S1) << endl;
}
break;
case 2:
if (StackLength(S2) == ERROR)
{
cout << "栈为空!" << endl;
}
else
{
cout << "length2=" << StackLength(S2) << endl;
}
break;
case 3:
if (GetTop(S1, e) == ERROR)
{
cout << "栈为空!" << endl;
}
else
{
cout << "栈顶元素为:" << e << endl;
}
break;
case 4:
if (GetTop(S2, e) == ERROR)
{
cout << "栈为空!" << endl;
}
else
{
cout << "栈顶元素为:" << e << endl;
}
break;
case 5:
cout << "请输入要S1插入的元素:\n";
cin >> e;
if (Push(S1, e) == OVERFLOW_s)
{
cout << "栈满!" << endl;
}
else
{
StackTraverse(S1);
}
break;
case 6:
cout << "请输入S2要插入的元素:\n";
cin >> e;
if (Push(S2, e) == OVERFLOW_s)
{
cout << "栈满!" << endl;
}
else
{
StackTraverse(S2);
}
break;
case 7:
if (Pop(S1, e) == ERROR)
{
cout << "栈为空!" << endl;
}
else
{
cout << "删除的栈顶元素为:" << e << endl;
}
break;
case 8:
if (Pop(S2, e) == ERROR)
{
cout << "栈为空!" << endl;
}
else
{
cout << "删除的栈顶元素为:" << e << endl;
}
break;
case 9:
StackTraverse(S1);
break;
case 10:
StackTraverse(S2);
break;
case 0:
cout << "操作结束!" << endl;
break;
default:
cout << "输入错误!" << endl;
}
} while (select != 0);
DestroyStack(S1);//销毁栈
DestroyStack(S2);//销毁栈
return 0;
}
- 用数组存两个栈
- 两个数组合并,去同存异
- 用vector存二维数组
- 将两个已经排好序的数组重新排序存于一个更大的数组中
- 用一个数组实现两个栈
- 用一个数组实现两个栈
- 一个用application存数组的例子
- 一个用application存数组的例子
- 完全二叉树用数组存
- 用两个线程模拟存票、售票过程
- App11_08_用两个线程模拟存票、售票过程
- 一个数组模拟两个栈
- 一个数组实现两个栈
- 一个数组实现两个栈
- 一个数组实现两个栈
- 一个数组实现两个栈
- 一个数组实现两个栈
- 一个数组实现两个栈
- PHP uniqid()函数可用于生成不重复的唯一标识符,该函数基于微秒级当前时间戳。在高并发或者间隔时长极短(如循环代码)的情况下,会出现大量重复数据。即使使用了第二个参数,也会重复,最好的方案是结
- 基于 Oracle 中间件的 SQL 审计
- tomcat报错(The Tomcat server configuration at \Servers\Tomcat v7.0 Server at localhost-config is miss)
- 使用Apriori算法进行关联分析
- 【重大更新】DevExpress v16.2新版亮点(Document篇)
- 用数组存两个栈
- Windows下Nginx配置SSL实现Https访问(包含证书生成)
- delphi编程里bool跟boolean类型的区别
- Fdk-aac使用
- java POI根据单元格的类型获取Excel单元格的内容
- 这里有一份面筋请查收(一)
- 蓝桥杯练习系统基础练习——求最值
- springmvc的<c:if>标签
- 一大波资源砸过来了~