實驗二 棧和佇列 順序棧 順序佇列

2022-05-25 05:09:06 字數 1376 閱讀 1820

棧是什麼?

棧是一種結構,也是一種方式。

棧代表著「後進先出」,我是這麼理解的(如圖)

就像是放在試管裡的雞蛋,新放進去的雞蛋肯定是在最上層,想拿走的話只能從最上層乙個個拿,這種方式叫做棧。

棧(stack)又名堆疊,它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對地,把另一端稱為棧底。向乙個棧插入新元素又稱作進棧、入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素;從乙個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素。

接下來看題目中,棧的定義

typedef int elemtype;

struct stackrecord;

typedef struct stackrecord *stack;

struct stackrecord

;

棧頂初始為-1,有第乙個元素時直接++就行了,top=0,此時capacity=1.

2489 字尾表示式求值  和樹的內容有關,可以等學了樹以後再來做這題

這題實現是很簡單,但是要確切明白原理不容易(不寫是因為我也不是很懂_(:з」∠)_),步驟如下:

1:if(輸入是數字)  則存入棧中

else(是運算子)  取出棧頂兩個元素,按運算子計算,將結果存入棧中

2:重複1的步驟,直至輸入停止

注意此方法只適用於 確保輸入合法 的情況

2277  棧的建立

stack createstack(int maxelements)

2280 元素進棧

做的時候很容易直接把top拿來當常量用

,注意應該是s->top

void push(stack s, elemtype x)

隊比棧更符合正常思維,所以更好理解。

隊就像排隊,進來只能放在隊尾,出去只能從隊首出去,那麼隊中間的呢?就慢慢等咯

做了鍊錶、棧再做隊就會覺得比較輕鬆

佇列置空時注意把所有引數都回到初始值。

//2249 

void makeempty(queue q)

//2294  佇列建立時,先給隊結構l申請空間,再按照給定的最大容量申請 array陣列的空間

queue createqueue(int maxelements)

2298 元素入隊

void enqueue(queue q, elemtype x)

棧和佇列 3順序佇列

adrian 由於順序佇列的底層使用的是陣列,因此需預先申請一塊足夠大的記憶體空間初始化順序佇列。除此之外,為了滿足順序佇列中資料從隊尾進,隊頭出且先進先出的要求,我們還需要定義兩個指標 top 和 rear 分別用於指向順序佇列中的隊頭元素和隊尾元素,如圖 1 所示 由於順序佇列初始狀態沒有儲存任...

順序棧 鏈棧 順序佇列 鏈佇列區別

順序棧的主要特徵是用乙個陣列實現棧的儲存,top指標確定棧頂元素位置 定義形式如下 define max 100 template class seqstack void push t x t gettop t pop bool isempty bool isfull int getsize pri...

順序棧和順序佇列

1.棧的定義 棧是限定在表尾進行插入和刪除操作的線性表 把允許插入和刪除的一端稱為棧頂 top 另一端稱為棧底 bottom 不含任何資料元素的棧稱為空棧。棧又稱為後進先出的線性表。棧的插入操作,叫做進棧,也稱為壓棧,入棧。子彈入彈夾 棧的刪除操作,叫做出棧,也有的叫做彈棧。1 順序棧的進棧操作 插...