早教吧 育儿知识 作业答案 考试题库 百科 知识分享

栈的操作设有两个栈S1和S2,按上图的方法共享一个数组的空间。试为此双向栈设计初始化inistack(intv[])、入栈push(intv[],inti,intx)和出栈pop(intv[],inti)的算法,其中i为1或2,用以指示栈号。

题目详情
栈的操作
设有两个栈S1和S2,按上图的方法共享一个数组的空间。试为此双向栈设计初始化inistack(int v[])、入栈push(int v[], int i, int x)和出栈pop(int v[], int i)的算法,其中i为1或2,用以指示栈号。试写一个算法,完成对任何一个栈(S1或S2)的入栈和出栈操作。

【实验要求】
设两个栈按上述方式存储在数组v[n]中,n>=20,从键盘输入8个正整数,存放在S1或S2的栈空间上,并输出S1和S2的元素值。
从键盘输入一个正整数,存放在Si(i=1或i=2)栈上,观察输出信息。
删除Si(i=1或i=2)栈的元素,输出S1和S2的元素值。
▼优质解答
答案和解析
struct stack
{
int no;
int top;
int bottom;
int *v;
}S1,S2;
int n;
#define N 20
int v[N];
inistack(int v[]){
s1.no=1;
s1.top =s1.bottom =0;
s1.no=2;
s1.top =s1.bottom =n-1;
s1.v=s2.v=v;
}
void push(int v[], int i, int x){
if(i==1){
v[s1.top++]=x;
}
else{
v[s2.top--]=x;
}
}
///////////////////////////////////////////////////////
// 带返回值弹出
int pop(int v[], int i)
{
int cur= 0;

if(i==1){
cur=v[s1.top--];
}
else{
cur=v[s2.top++];
}
return cur;
}
//不带返回值弹出 void pop(int v[],int i)
{
if(i==1){
s1.top--;
}else if(i==2)
{
s2.top++;
}
}
看了 栈的操作设有两个栈S1和S2...的网友还看了以下: