程式設計師面試寶典 棧和佇列相關面試題

2021-08-03 14:12:43 字數 1763 閱讀 4334

1、集合棧

題目描述:

請實現一種資料結構setofstacks,由多個棧組成,其中每個棧的大小為size,當前乙個棧填滿時,新建乙個棧。該資料結構應支援與普通棧相同的push和pop操作。

給定乙個操作序列int[2] ope(c++為vector>),每個操作的第乙個數代表操作型別,若為1,則為push操作,後乙個數為應push的數字;若為2,則為pop操作,後乙個數無意義。請返回乙個int(c++為vector>),為完成所有操作後的setofstacks,順序應為從下到上,預設初始的setofstacks為空。保證資料合法。

問題分析:

(1)首先建立乙個存放長度達到size的棧vec,用來存放長度達到size的棧(vector>);

(2)在建立乙個temp棧用來操作當前要進行操作的資料(vector);

(3)進來之後for迴圈遍歷0~ope.size(),對於壓棧的情況ope[i][0]==1,先判斷棧temp棧中的元素是否達到size個,如果達到就將其先壓入vec棧中,再清空temp棧,執行temp的壓棧操作,否者直接將元素壓入到temp當中;

(4)對於出棧時,首先判斷temp棧是否為空,不為空則直接從temp中丟擲元素,否則讓temp指向vec棧的棧頂,然後讓vec和temp都執行元素出棧動作。

(5)最後如果temp中的元素個數不為空,則將temp壓入到vec當中,返回vec即可

**實現

vector> setofstacks(vector> ope, int size) 

else

} }if (temp.size() != 0)

stack.push_back(temp);

return stack;

}

2、兩個棧實現佇列

3、雙棧排序

題目描述:

請編寫乙個程式,按公升序對棧進行排序(即最大元素位於棧頂),要求最多只能使用乙個額外的棧存放臨時資料,但不得將元素複製到別的資料結構中。

給定乙個int numbers(c++中為vector),其中第乙個元素為棧頂,請返回排序後的棧。請注意這是乙個棧,意味著排序過程中你只能訪問到第乙個元素。

測試樣例:[1,2,3,4,5]

返回:[5,4,3,2,1]

問題分析:

(1)首先建立乙個輔助棧temp,用來存放最終要返回的棧;

(2)將numbers的第乙個元素push到輔助棧中,其後的過程就和插入排序的思路完全一樣,只不過再此使用vector的介面來進行實現的;

(3)因為要對棧進行公升序排序,所以若numbers[i]

(4)所有元素都操作完之後,返回最後排好序的temp棧即可

**實現:

vectortwostackssort(vectornumbers) 

else if (ope[i][0] == 2)

else if (ope[i][1] == 1)}}

else if (ope[i][1] == 2)}}

}} return res;

}}

程式設計師面試寶典

據統計,80 的簡歷都是不合格的。不少人事管理者抱怨收到的許多簡歷在格式上很糟糕。簡歷應該如何做到在格式上簡潔明瞭,重點突出?求職信應該如何有足夠的內容推銷自己?如何控制長度,言簡意賅?相信讀了本章你會對簡歷的撰寫有乙個新的認識。2.1 簡歷注意事項 1 簡歷不要太長 一般的簡歷普遍都太長。其實簡歷...

《程式設計師面試寶典》摘記

簡歷注意事項 1.簡歷不要太長 中文簡歷壓縮在 2頁左右就可以把所有的內容突出了。一般來說學習經歷應該從大學開始寫起。2.如實填寫。3.不要過分謙虛,不要把自己的一切包括弱項都寫進去。4.求職簡歷上一定要註明求職的職位。根據所申請的職位來設計,突出你在這方面的優點。編寫乙份或者幾份有針對性的簡歷。5...

程式設計師面試寶典一

1 int i i 首先宣告乙個變數i,然後將變數i的值 未初始化 賦值給自己 2 下面 的意義 void func int x,int count 求乙個整數轉換為二進位制之後包含多少個1 3 printf在vc6.0下是自右向左運算的 好像跟編譯器有關 int arr int ptr arr p...