面試題(判斷元素出棧入棧順序的合法性。)

2021-08-08 18:20:17 字數 1301 閱讀 4575

面試題(實現乙個棧,要求實現push(出棧)、pop(入棧)、min(返回最小值的操作)的時間複雜度為o(1))

面試題(兩個棧實現乙個佇列和兩個佇列實現乙個棧)

判斷元素出棧,入棧順序的合法性

如:入棧的序列(1,2,3,4,5),出棧序列為(4,5,3,2,1)是合法序列

入棧的序列(1,2,3,4,5),出棧序列為(1,5,3,2,4)是不合法序列

解題思路:我們宣告兩個棧,分別為input和output,input存放的是入棧序列,而output存放的是出棧序列。而lenin是入棧序列的長度,而lenout是出棧序列的長度。

如果lenin與lenout 不相等的話,直接返回false

然後我們宣告乙個棧s我們利用迴圈給棧s中新增元素,每壓棧乙個元素我們將它和出棧序列進行比較,如果相等的話,就刪除掉剛剛給棧s新增的資料,同時出棧序列++指向下乙個元素。如此迴圈,直到迴圈結束,迴圈結束如果棧s為空則為真,反之為假。

**實現部分:

#include

#include

#include

using

namespace

std;

bool checklegal(int* input, int* output, int lenin,int lenout)

stack

s;

int i = 0;

int j = 0;

for (; i < lenin; ++i)

}return (s.size() == 0) ? true : false;// 結束for迴圈size應該等於0,返回true,否則返回false

}void test1()

; //入棧序列

int output = ; //出棧序列

int lenin = sizeof(input) / sizeof(input[0]);

int lenout = sizeof(output) / sizeof(output[0]);

int a = checklegal(input, output, lenin, lenout);

if (a)

cout

<< "合法"

<< endl;

else

cout

<< "不合法"

<< endl;

}

判斷元素出棧入棧順序的合法性

思路 假設入棧序列,出棧序列 首先我們將入棧序列的第乙個元素入棧,這是設定乙個指標只想出棧序列的第乙個元素,如果出入棧以後,棧頂 元素和出棧指標所指向的元素相等,那麼就讓棧頂元素出棧,讓指標 最後判斷棧為空就好,若為空,就說明是合法的,如果不是就是不合法。如下 include include inc...

序列元素IT面試題 判斷合法出棧序列

本文純屬個人見解,是對前面學習的總結,如有描述不正確的地方還請高手指正 在技巧筆試口試上,我們常常會碰到這樣一類題型,如給你乙個入棧序列,然後再讓你判斷幾個序列是否有可能為它的出棧序列,如 入棧序列為 1 2 3 4 5,則 1 2 3 4 5可能為它的出棧序列,而 5 4 1 2 3弗成能為它的 ...

棧的入棧,出棧,顯示入棧元素

要實現的功能如下 printf t t1.入棧 n printf t t2.出棧 n printf t t3.顯示棧內元素 n define maxsize 5 巨集定義 typedef struct stack 定義棧 void push stack p,int e void printstack...