最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語(yǔ)言實(shí)現(xiàn)出棧序列合法性判定

 更新時(shí)間:2021年05月03日 11:12:18   作者:奮斗的龍貓  
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)出棧序列合法性判定,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了C語(yǔ)言實(shí)現(xiàn)出棧序列合法性判定的具體代碼,供大家參考,具體內(nèi)容如下

輸入兩個(gè)整數(shù)序列,第一個(gè)序列表示棧的壓入順序,請(qǐng)判斷第二個(gè)序列是否可能為該棧的彈出順序。

假設(shè)壓入棧的所有數(shù)字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對(duì)應(yīng)的一個(gè)彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。(注意:這兩個(gè)序列的長(zhǎng)度是相等的)

輸入格式
第一行一個(gè)整數(shù)n,表示輸入序列的長(zhǎng)度。(1<=n<=10000)
第二行n個(gè)整數(shù),表示棧的壓入順序。
第三行n個(gè)整數(shù),表示棧的出棧順序。

輸出格式
如果是彈出序列,輸出yes,否則輸出no。

輸入樣例
5
1 2 3 8 6
8 6 3 2 1

輸出樣例
yes

準(zhǔn)備工作:

①定義一個(gè)棧,并且實(shí)現(xiàn)它的基本操作(出棧popStack()/壓棧pushStack()/訪問棧頂元素getTop()/判斷棧是否為空isEmpty()等)
②定義兩個(gè)長(zhǎng)度為10000的整形數(shù)組的,分別表示要壓入順序的數(shù)字msg以及出棧順序的數(shù)字target.。為了避免要書寫兩個(gè)for循環(huán)來(lái)輸入,這里可以通過(guò)調(diào)用方法input(int *arr,int len),每次輸入msg/target的時(shí)候,只要調(diào)用這個(gè)方法即可,從而減少代碼量。

解題思路:(主要是通過(guò)循環(huán)嵌套)

1、通過(guò)遍歷msg,將遍歷得到的數(shù)字壓入到棧中。
2、每次壓入數(shù)字之后,要獲取棧頂元素ch,然后判斷ch是否和當(dāng)前target下標(biāo)對(duì)應(yīng)的數(shù)字相同,如果相同,那么就從棧中跳出一個(gè)元素,同時(shí)target的下標(biāo)后移。這時(shí)候,我們依舊需要從棧中獲取棧頂元素,那這個(gè)棧頂元素和當(dāng)前target下標(biāo)的數(shù)字進(jìn)行比較,如果相等,那么繼續(xù)重復(fù)上述的操作。
這里之所以需要這么做,是因?yàn)?span style="color: #800000">考慮到類似于壓入一個(gè)元素之后,就跳出一個(gè)元素的可能,所以我們需要在target中找到相同的數(shù)字之后,不僅需要將target后移,同時(shí)需要將從棧中跳出原來(lái)的棧頂元素,然后拿新的棧頂元素和target當(dāng)前下標(biāo)的值進(jìn)行比較,直到新的棧頂元素和target當(dāng)前下標(biāo)的值不相等。
3、如果不相等,那么這時(shí)候就將msg后移。重復(fù)1、2步驟。直到msg已經(jīng)遍歷完了。
4、這時(shí)候如果target已經(jīng)遍歷完了,那么就說(shuō)明了target就是msg的一種出??赡埽駝t,如果target沒有遍歷完,說(shuō)明target不是msg的一種出棧可能。

圖解:

完整代碼(C語(yǔ)言):

#include<stdio.h>
#define ERROR 0
#define OK 1
#define MAX_SIZE 10000
typedef struct NODE{
   int arr[MAX_SIZE];
   int top;
}Node;
void init(Node &s){
   s.top = 0;
}
int pushElem(Node &s,int c){
   if(s.top == MAX_SIZE)
     return ERROR;
   s.arr[s.top++] = c;
   return OK;
}
int popElem(Node &s,int &e){
   if(s.top == 0)
     return ERROR;
   e = s.arr[--s.top];
   return OK;
}
int getTop(Node &s,int &e){
   if(s.top == 0)
     return ERROR;
   e = s.arr[s.top - 1];
   return OK;
}
int isEmpty(Node &s){
   return s.top == 0;
}
int testIsTrue(int *msg,int *target){
  Node s;
  int ch;
  init(s);
  while(*msg != '\0'){
     pushElem(s,*msg);//將壓棧字符串中的字符壓入棧中
     //獲取棧頂元素
     getTop(s,ch);
     while(ch == *target){
        //如果當(dāng)前棧頂?shù)淖址蛷棗W址嗤敲淳蛷臈V刑?
        popElem(s,ch);
        target++;//彈棧字符串后移
        /*
        //獲取棧頂元素,這里之所以不用判斷棧是否為空,是因?yàn)橹饕紤]ch是否等于target
        而此時(shí)target已經(jīng)后移了,所以并不會(huì)造成死循環(huán)
        */
        getTop(s,ch);
     }
     msg++;//當(dāng)ch不等于彈棧字符串的字符的時(shí)候,那么就將后移
  }
  if(*target != '\0')
    return 0;
  return 1;
}
void input(int *arr,int n){
  int i;
  for(i = 0; i < n; i++)
    scanf("%d",&arr[i]);
}
int main(){
  int msg[10000],target[10000];
  int n,flag;
  printf("請(qǐng)輸入棧的元素個(gè)數(shù):");
  scanf("%d",&n);
  input(msg,n);//調(diào)用input方法,從而輸入n個(gè)數(shù)字
  input(target,n);
  flag = testIsTrue(msg,target);//判斷出棧順序是否為壓棧順序的一種出??赡?
  if(flag)
    printf("yes");
  else
    printf("no");
  return 0;
}

運(yùn)行結(jié)果:

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解C++中的雙冒號(hào) ::

    詳解C++中的雙冒號(hào) ::

    這篇文章主要介紹了C++中的雙冒號(hào) ::,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2020-09-09
  • C++中拷貝構(gòu)造函數(shù)的使用

    C++中拷貝構(gòu)造函數(shù)的使用

    大家好,本篇文章主要講的是C++中拷貝構(gòu)造函數(shù)的使用,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-02-02
  • C++無(wú)鎖數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)示例詳解

    C++無(wú)鎖數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)示例詳解

    這篇文章主要為大家介紹了C++無(wú)鎖數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • Matlab實(shí)現(xiàn)極坐標(biāo)堆疊柱狀圖的繪制

    Matlab實(shí)現(xiàn)極坐標(biāo)堆疊柱狀圖的繪制

    極坐標(biāo)堆疊圖也是風(fēng)玫瑰圖的常用形式,MATLAB的bar繪制的條形圖可以繪制成堆疊形式,但是并沒有一個(gè)自帶函數(shù)可以繪制極坐標(biāo)堆疊圖。本文將為大家提供Matlab繪制極坐標(biāo)堆疊柱狀圖的示例代碼,需要的可以參考一下
    2022-08-08
  • C語(yǔ)言實(shí)現(xiàn)控制臺(tái)掃雷小游戲

    C語(yǔ)言實(shí)現(xiàn)控制臺(tái)掃雷小游戲

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)控制臺(tái)掃雷小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • 在C++中如何阻止類被繼承詳解

    在C++中如何阻止類被繼承詳解

    這篇文章主要介紹了在C++中如何阻止類被繼承,對(duì)于C++初學(xué)者而言可以通過(guò)本文實(shí)例更好的理解類的原理及運(yùn)用,需要的朋友可以參考下
    2021-09-09
  • C++實(shí)現(xiàn)LeetCode(101.判斷對(duì)稱樹)

    C++實(shí)現(xiàn)LeetCode(101.判斷對(duì)稱樹)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(101.判斷對(duì)稱樹),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C語(yǔ)言完全平方整數(shù)的判斷

    C語(yǔ)言完全平方整數(shù)的判斷

    大家好,本篇文章主要講的是C語(yǔ)言完全平方整數(shù)的判斷,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • C++ 程序拋出異常后執(zhí)行順序說(shuō)明

    C++ 程序拋出異常后執(zhí)行順序說(shuō)明

    這篇文章主要介紹了C++ 程序拋出異常后執(zhí)行順序說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02
  • MFC對(duì)話框?qū)崿F(xiàn)梯形分頁(yè)

    MFC對(duì)話框?qū)崿F(xiàn)梯形分頁(yè)

    這篇文章主要為大家詳細(xì)介紹了MFC對(duì)話框?qū)崿F(xiàn)梯形分頁(yè),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-06-06

最新評(píng)論

宜春市| 延安市| 昌吉市| 上犹县| 香格里拉县| 亚东县| 开鲁县| 肃宁县| 固原市| 台中县| 仲巴县| 西华县| 象山县| 沽源县| 阿勒泰市| 东乡族自治县| 郸城县| 高邮市| 汽车| 新田县| 富裕县| 四平市| 玉门市| 察隅县| 南昌县| 吴堡县| 团风县| 阿克苏市| 泸水县| 大丰市| 射洪县| 育儿| 赤壁市| 潼关县| 鞍山市| 民县| 彰化市| 东台市| 海阳市| 龙里县| 清原|