将编号为0和1的两个栈存放于一个数组空间V[m]中。
生活随笔
收集整理的這篇文章主要介紹了
将编号为0和1的两个栈存放于一个数组空间V[m]中。
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
1.題目描述
2.算法實現
1.題目描述
?
將編號為0和1的兩個棧存放于一個數組空間V[m]中,棧底分別處于數組的兩端。當第0號棧的棧頂指針top[0]等于-1時該棧為空;當第1號棧的棧頂指針top[1]等于m時該棧為空。兩個棧均從兩端向中間增長(見圖)。試編寫雙棧初始化,判斷棧空、棧滿、進棧和出棧等算法的函數。
2.算法實現
?
#include<bits/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.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為棧號,i為0表示左棧,i=1表示右棧,e是入棧元素。if(i<0||i>1){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代表棧號,i=0為左棧,i=1為右棧退棧成功時返回退棧元素*/if(i<0||i>1){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 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.元素進棧!\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<<"請輸入序號:";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進左棧,1進右棧:";cin>>i;cout<<"請輸入進棧元素:";cin>>e;if(Push(S,i,e))cout<<"元素進棧成功!\n\n";else cout<<"元素進棧成功!\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; }?
總結
以上是生活随笔為你收集整理的将编号为0和1的两个栈存放于一个数组空间V[m]中。的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 试编写算法,设任意n个整数存放于数组A[
- 下一篇: 用数组存储字符C进行回文检测