菏泽做企业网站,未来最紧缺的十大专业,深圳头条新闻,网店美工的职责有哪些目录
1.题目描述
2.算法实现 1.题目描述 将编号为0和1的两个栈存放于一个数组空间V[m]中,栈底分别处于数组的两端。当第0号栈的栈顶指针top[0]等于-1时该栈为空#xff1b;当第1号栈的栈顶指针top[1]等于m时该栈为空。两个栈均从两端向中间增长#xff08;见图#xff09;…目录
1.题目描述
2.算法实现 1.题目描述 将编号为0和1的两个栈存放于一个数组空间V[m]中,栈底分别处于数组的两端。当第0号栈的栈顶指针top[0]等于-1时该栈为空当第1号栈的栈顶指针top[1]等于m时该栈为空。两个栈均从两端向中间增长见图。试编写双栈初始化判断栈空、栈满、进栈和出栈等算法的函数。 2.算法实现 #includebits/stdc.h
#define MAXSIZE 100
using namespace std;typedef struct
{int top[2],bot[2]; //栈顶和栈底指针int *V; //栈数组int m; //栈最大可容纳元素个数
} DblStack;int InitDblStack(DblStack S)
{S.Vnew int [S.m];S.mMAXSIZE;S.top[0]-1;S.top[1]S.m;return 1;
}int isEmpty(DblStack S)
{if(S.top[0]-1S.top[1]S.m)return 1;else return 0;
}int isFull(DblStack S)
{if(S.top[1]-S.top[0]-1||S.top[1]0||S.top[0]S.m-1)return 1;else return 0;
}int Push(DblStack S,int i,int e)
{//i为栈号i为0表示左栈i1表示右栈e是入栈元素。if(i0||i1){cout栈号输入不对endl;exit(0);}if(S.top[1]-S.top[0]1){cout栈已满;return 0;}switch(i){case 0:{S.top[0];S.V[S.top[0]]e;return 1;break;}case 1:{S.V[S.top[1]]e;S.top[1]--;return 1;break;}}
}int Pop(DblStack S,int i)
{/*退栈。i代表栈号i0为左栈i1为右栈退栈成功时返回退栈元素*/if(i0||i1){cout栈号输入不对endl;exit(0);}switch(i){case 0:if(S.top[0]-1){cout栈空;return -1;}else return (S.V[S.top[0]]--);case 1:if(S.top[0]S.m){cout栈空;return -1;}else return (S.V[S.top[1]]);}
}void printDblStack(DblStack S,int i)
{//遍历双栈i为0遍历左栈i为1遍历右栈switch(i){case 0:{for(int i0;iS.top[0];i)coutS.V[i] ;}case 1:{for(int iS.m;iS.top[1];i--)coutS.V[i] ;}}cout\n;
}void display()
{cout 1.双栈初始化\n\n 2.判断栈空\n\n 3.判断栈满\n\n 4.元素进栈\n\n 5.元素出栈\n\n 6.遍历双栈\n\n 0.退出\n\n;
}
int main()
{DblStack S;int i,e;bool atrue;display();while(a){int n;cout请输入序号;cinn;switch(n){case 1:{if(InitDblStack(S))cout双栈初始化成功\n\n;break;}case 2:{if(isEmpty(S)) cout栈空\n\n;else cout栈非空\n\n;break;}case 3:{if(isFull(S)) cout栈满\n\n;else cout栈未满\n\n;break;}case 4:{cout输入0进左栈1进右栈;cini;cout请输入进栈元素;cine;if(Push(S,i,e))cout元素进栈成功\n\n;else cout元素进栈成功\n\n;break;}case 5:{cout输入0出左栈1出右栈:;cini;cout出栈元素是Pop(S,i)\n\n;break;}case 6:{cout输入0遍历左栈1遍历右栈:;cini;printDblStack(S,i);break;}case 0:{afalse;cout已退出\n\n;break;}}}return 0;
}