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...