| 這個作業屬於哪個班級 | 資料結構--網路2011/2012 |
| ---- | ---- | ---- |
| 這個作業的位址 | ds部落格作業02-棧和佇列 |
| 這個作業的目標 | 學習棧和佇列的結構設計及運算操作 |
| 姓名 | 李雷默 |
順序表(底層實現是陣列)和棧結構的儲存資料的方式高度相似,只不過棧對資料的訪問過程有特殊的限制,而順序表沒有。
鍊錶的頭部作為棧頂,意味著:
因此,鏈棧實際上就是乙個只能採用頭插法插入或刪除資料的鍊錶。
void push(listack &s,elemtype e)
;}
出棧
bool pop(listack &s,elemtype &e)
p=s->next;
e=p->data;
s->enxt=p->next;
delete p;
return true;
}
中綴表示式轉化為字尾表示式:
中綴表示式a + b*c + (d * e + f) * g,其轉換成字尾表示式則為a b c * + d e * f + g * +。
過程如下:
如果遇到運算元,我們就直接將其輸出。
如果遇到操作符,則我們將其放入到棧中,遇到左括號時我們也將其放入棧中。
如果遇到乙個右括號,則將棧元素彈出,將彈出的操作符輸出直到遇到左括號為止。注意,左括號只彈出並不輸出。
如果遇到任何其他的操作符,如(「+」, 「*」,「(」)等,從棧中彈出元素直到遇到發現更低優先順序的元素(或者棧為空)為止。彈出完這些元素後,才將遇到的操作符壓入到棧中。有一點需要注意,只有在遇到" ) "的情況下我們才彈出" ( ",其他情況我們都不會彈出" ( "。
如果我們讀到了輸入的末尾,則將棧中所有元素依次彈出。
順序佇列的底層使用的是陣列,因此需預先申請一塊足夠大的記憶體空間初始化順序佇列。除此之外,為了滿足順序佇列中資料從隊尾進,隊頭出且先進先出的要求,我們還需要定義兩個指標(front 和 rear)分別用於指向順序佇列中的隊頭元素和隊尾元素。
}7-5 jmu-報數遊戲
for(i = 0;i本題需要考慮到左符號剩餘,右符號剩餘,配對情況,不配對情況,需要多重if 來進行約束判斷,最後根據len的值輸出對應的結果。
};
佇列的特性是 fifofifo(先入先出),而棧的特性是 filofilo(先入後出)。
知道兩者特性之後,我們需要用兩個棧來模擬佇列的特性,乙個棧為入隊棧,乙個棧為出對棧。
當出隊棧存在內容時,出隊棧的棧頂,即為第乙個出隊的元素。
若出隊棧無元素,我們的需求又是出隊的話,我們就需要將入隊棧的內容反序匯入出隊棧,然後彈出棧頂即可。
DS部落格作業02 棧和佇列
棧的應用 佇列的儲存結構及操作 佇列的應用 編譯錯誤 這題我是在vs除錯能執行後才提交到pta的,編譯錯誤是因為pta預設編譯語言是c,而我用的是c 答案正確 這裡就說一下我在vs除錯過程中遇到的問題吧。1.初始化迴圈佇列的時候一直在糾結要不要讓front指向第乙個節點的前乙個位置,也就是多設乙個空...
DS部落格作業02 棧和佇列
佇列定義 1 佇列 queue 是只允許在一端進行插入操作,而在另一端進行刪除操作的線性表。2 與棧相反,佇列是一種先進先出的線性表.3 實現乙個佇列同樣需要順序表或鍊錶作為基礎。佇列的鏈式儲存結構 佇列即可用鍊錶實現,也可以用順序表實現,而棧一般用順序表實現,佇列用鍊錶實現,簡稱鏈佇列 typed...
DS部落格作業03 棧和佇列
在createstack函式中為結構體和陣列分配好記憶體,push函式先判斷堆疊是否滿,然後根據tag對相應堆疊進行輸入 pop函式先根據tag判斷對那個堆疊操作,然後再進行判斷是否為空,不空就出棧。q1 輸出搞錯了,滿是沒有輸出tag沒有輸出 q2 沒賦值直接用mystack maxsize 假設...