日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

29. 栈的push,pop序列

發布時間:2024/8/23 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 29. 栈的push,pop序列 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目:給定2個整數序列,其中1個是棧的push順序,判斷另一個有沒有可能是對應的pop順序

解:其實這題主要是判斷進棧次數和出棧次數誓不是相等。我是用棧作的,效率不高,每一個元素最多出棧1次,進棧1此,所以最多進行2n次操作,然后每次對棧頂元素和pb指針指向的元素進行比較(因為假設序列中整數都不相等)

代碼:

/*判斷棧push和pop順序是否符合push中的元素順序入棧,如果等于pb指向的元素,那么循環出棧,知道棧空或者pb元素和棧頂元素不一樣,如果一樣,出棧且pb++,總共的入棧出棧次數最多是2*n次*/#include<iostream> using namespace std; #define MAX 50typedef struct {int data[MAX];int top; }Stack;Stack* create_stack(void) {Stack* s=new Stack;if(s)s->top=-1;return s; }bool empty_stack(Stack* s) {if(-1==s->top)return true;return false; }bool full_stack(Stack* s) {if(MAX-1==s->top)return true;return false; }void push_stack(Stack* s,int value) {if(full_stack(s))return ;s->top++;s->data[s->top]=value; }int pop_stack(Stack* s) {if(empty_stack(s))return -1;int temp=s->data[s->top];s->top--;return temp; }int get_stack(Stack* s) {if(empty_stack(s))return -1;return s->data[s->top]; }void free_stack(Stack* s) {if(s){delete s;s=NULL;} }bool satisfy(int *a,int *b,int n) {int i=0;int pa,pb;Stack* s;pa=0;pb=0;s=create_stack();while(i++<2*n){if(pa==n && pb==n)break;if(pa<n){ push_stack(s,a[pa]);pa++;}while(!empty_stack(s) && get_stack(s)==b[pb]){pop_stack(s);pb++;}}bool flag;if(empty_stack(s) && pb==n)flag=true;elseflag=false;free_stack(s);return flag;}int main(void) {int a[MAX];int b[MAX];int n,i;cin>>n;for(i=0;i<n;i++)cin>>a[i];for(i=0;i<n;i++)cin>>b[i];cout<<boolalpha;cout<<satisfy(a,b,n)<<endl;return 0; }

?

轉載于:https://www.cnblogs.com/buxianghe/p/3262418.html

總結

以上是生活随笔為你收集整理的29. 栈的push,pop序列的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。