将编号为0和1的两个栈存放于一个数组空间V[m]中。
生活随笔
收集整理的這篇文章主要介紹了
将编号为0和1的两个栈存放于一个数组空间V[m]中。
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
目錄
1.題目描述
2.算法實(shí)現(xiàn)
1.題目描述
?
將編號(hào)為0和1的兩個(gè)棧存放于一個(gè)數(shù)組空間V[m]中,棧底分別處于數(shù)組的兩端。當(dāng)?shù)?號(hào)棧的棧頂指針top[0]等于-1時(shí)該棧為空;當(dāng)?shù)?號(hào)棧的棧頂指針top[1]等于m時(shí)該棧為空。兩個(gè)棧均從兩端向中間增長(zhǎng)(見圖)。試編寫雙棧初始化,判斷棧空、棧滿、進(jìn)棧和出棧等算法的函數(shù)。
2.算法實(shí)現(xiàn)
?
#include<bits/stdc++.h> #define MAXSIZE 100 using namespace std;typedef struct {int top[2],bot[2]; //棧頂和棧底指針int *V; //棧數(shù)組int m; //棧最大可容納元素個(gè)數(shù) } DblStack;int InitDblStack(DblStack &S) {S.V=new int [S.m];S.m=MAXSIZE;S.top[0]=-1;S.top[1]=S.m;return 1; }int isEmpty(DblStack &S) {if(S.top[0]==-1&&S.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為棧號(hào),i為0表示左棧,i=1表示右棧,e是入棧元素。if(i<0||i>1){cout<<"棧號(hào)輸入不對(duì)"<<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代表?xiàng)L?hào),i=0為左棧,i=1為右棧退棧成功時(shí)返回退棧元素*/if(i<0||i>1){cout<<"棧號(hào)輸入不對(duì)"<<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 i=0;i<S.top[0];i++)cout<<S.V[i]<<" ";}case 1:{for(int i=S.m;i<S.top[1];i--)cout<<S.V[i]<<" ";}}cout<<"\n"; }void display() {cout<<" 1.雙棧初始化!\n\n"" 2.判斷棧空!\n\n"" 3.判斷棧滿!\n\n"" 4.元素進(jìn)棧!\n\n"" 5.元素出棧!\n\n"" 6.遍歷雙棧!\n\n"" 0.退出!\n\n"; } int main() {DblStack S;int i,e;bool a=true;display();while(a){int n;cout<<"請(qǐng)輸入序號(hào):";cin>>n;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進(jìn)左棧,1進(jìn)右棧:";cin>>i;cout<<"請(qǐng)輸入進(jìn)棧元素:";cin>>e;if(Push(S,i,e))cout<<"元素進(jìn)棧成功!\n\n";else cout<<"元素進(jìn)棧成功!\n\n";break;}case 5:{cout<<"輸入0出左棧,1出右棧:";cin>>i;cout<<"出棧元素是:"<<Pop(S,i)<<"\n\n";break;}case 6:{cout<<"輸入0遍歷左棧,1遍歷右棧:";cin>>i;printDblStack(S,i);break;}case 0:{a=false;cout<<"已退出!\n\n";break;}}}return 0; }?
總結(jié)
以上是生活随笔為你收集整理的将编号为0和1的两个栈存放于一个数组空间V[m]中。的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 试编写算法,设任意n个整数存放于数组A[
- 下一篇: 用数组存储字符C进行回文检测