DS部落格作業03 棧和佇列

2022-05-17 18:26:06 字數 2502 閱讀 4297

棧(stack)是乙個後進先出的線性表,它要求只在表尾進行刪除和插入操作。有乙個top指標,指向棧頂元素。只能從棧頂進,從棧頂出。

佇列(queue)是一種先進先出的線性表,限定只能在表的一端進行插入,在表的另一端進行刪除的特殊的線性表。有兩個指標,乙個rear指向隊尾,乙個front指向隊首。從隊尾進,從隊首出。

本題要求在乙個陣列中實現兩個堆疊。

注意:如果堆疊已滿,push函式必須輸出「stack full」並且返回false;如果某堆疊是空的,則pop函式必須輸出「stack tag empty」(其中tag是該堆疊的編號),並且返回error。

stack createstack( int maxsize )

bool push( stack s, elementtype x, int tag )

s->top1++;

s->data[s->top1]=x;

return true;

} else if(tag==2)

s->top2--;

s->data[s->top2]=x;

return true; }}

elementtype pop( stack s, int tag )

x=s->data[s->top1];

s->top1--;

return x;

} else if(tag==2)

x=s->data[s->top2];

s->top2++;

return x;

}}

如果用乙個迴圈陣列表示佇列,並且只設佇列頭指標front,不設尾指標rear,而是另設count記錄佇列中元素個數。請編寫演算法實現佇列的入隊和出隊操作。

注意:如果佇列已滿,addq函式必須輸出「queue full」並且返回false;如果佇列是空的,則deleteq函式必須輸出「queue empty」,並且返回error。

假設表示式中允許包含3種括號:圓括號、方括號和大括號。即(,[,'{'。編寫乙個演算法判斷表示式中的括號是否正確配對, 要求利用棧的結構實現。

若匹配,輸出yes。若不匹配,輸出當前棧頂元素再換行輸出no,並。若棧頂為空,則輸出no。

算術表示式有字首表示法、中綴表示法和字尾表示法等形式。日常使用的算術表示式是採用中綴表示法,即二元運算子位於兩個運算數中間。請設計程式將中綴表示式轉換為字尾表示式。

在一行中輸出轉換後的字尾表示式,要求不同物件(運算數、運算符號)之間以空格分隔,但結尾不得有多餘空格。

錯題6-3:輸入乙個字尾表示式,程式求出表示式值。

錯題**:

錯誤原因:

錯誤體會:

錯題7-3:列車排程。

錯題**:未寫。。。

**體會:

注意:分析錯誤原因及體會,主要講**錯誤

DS部落格作業03 棧和佇列

在createstack函式中為結構體和陣列分配好記憶體,push函式先判斷堆疊是否滿,然後根據tag對相應堆疊進行輸入 pop函式先根據tag判斷對那個堆疊操作,然後再進行判斷是否為空,不空就出棧。q1 輸出搞錯了,滿是沒有輸出tag沒有輸出 q2 沒賦值直接用mystack maxsize 假設...

DS部落格作業03 棧和佇列

本週學習的內容是棧和佇列,相比前一單元的順序表內容,容易了很多,操作上更加簡便。順序表包括順序表和煉表兩塊大內容,順序表的操作主要有建立順序表,查詢順序表中的元素,順序表元素的插入和刪除。鍊錶的主要操作有頭插法建表和尾插法建表,鍊錶的遍歷查詢,有序鍊錶的插入和刪除以及兩個有序鍊錶的合併。而本單元的棧...

DS部落格作業03 棧和佇列

本週學習的棧和佇列,對我來說難點在於棧和佇列的輸出輸入中的棧空和隊空判斷,容易不小心把兩個寫混。在程式設計時,選擇用棧的順序儲存結構空間利用率高,而用鏈式儲存結構可以不用擔心空間的不足或浪費,二者各有優勢,但目前我用順序儲存結構更多。學了棧和佇列,許多問題的解決變得方便了許多,比如括號問題的求解,表...