棧 佇列和陣列

2022-08-27 02:33:10 字數 1653 閱讀 8088

一、棧和佇列的基本概念

1.棧是一種線性表無疑。一般提供兩種操作:入棧(push) 和出棧( pop)。分別對應著資料插入和資料刪除。

佇列的話,也是一種線性表。和棧不同的是,棧只能在棧頂操作(push&pop),而佇列被限制為從一端入,從另一端出。

這裡的棧和佇列指的都是最一般的情況。

2.棧是先進後出的(first in last out, filo),佇列是先進先出的(first in first out, fifo)。

從真題來看,這部分題考概念的比較簡單。

二、棧和佇列的順序儲存結構

1、順序棧

1

//定義

2 typedef struct

3sqstack;

考試的時候,簡單的可以這麼寫

1

int mystack[max_size];//

例如int mystack[1000];

2int top = -1;3

4//push key

5 mystack[++top] =key;6//

pop7 key = mystack[top--];

2、順序隊

1 typedef struct

2sqqueue;

3、迴圈佇列

front和rear迴圈。

rear不能超過front一圈。

這部分內容比較繞的就是迴圈佇列,還有就是隊頭隊尾的位置判斷,還有對隊列為空和為滿的判斷。

三、棧和佇列的鏈式儲存結構

1、棧 鏈式實現

1 typedef struct

lnode

2lnode, *linkstack;67

//push

8 newlnode->data =key;

9 newlnode->next = headlnode->next;

10 headlnode->next =newlnode;

1112

//pop

13 temp = headlnode->next;

14 key = temp->data;

15 headlnode->next = temp->next;

16 free(temp);

2、佇列 鏈式實現

1 typedef struct

qnode

2qnode;

67 typedef struct

8linkqueue;

1213

//入隊

14 lqu->rear->next =p;

15 lqu->rear =p;

16//

出隊17 p = lqu->front;

18 lqu->front = p->next;

19 key = p->data;

20 free(p);

四、棧和佇列的應用

棧的話,很常規的乙個東西就是表示式計算。

佇列的話,cpu資源競爭的問題、主機和印表機之間的協調等等。

五、特殊矩陣的壓縮儲存

1、對稱陣a壓縮到sa[n(n+1)/2];

2、三角矩陣a壓縮到sa[n(n+1)/2];

3、對角矩陣

陣列和棧,佇列

push 用於在array結尾新增乙個或多個項,pop 方法用於刪除最後乙個陣列項 length 1 返回它作為函式值 shift 將刪除陣列中的第乙個項,將其作為函式值返回 另乙個方法是unshift 方法,它把乙個項放在陣列的第乙個位置,然後把餘下的項向下移動乙個位置 var a a b c d...

陣列 鍊錶 棧 佇列

陣列用一塊連續的記憶體空間,來儲存相同型別的一組資料,最大的特點就是支援隨機訪問,但插入 刪除操作也因此變得比較低效,平均情況時間複雜度為 o n 在平時的業務開發中,我們可以直接使用程式語言提供的容器類,但是,如果是特別底層的開發,直接使用陣列可能會更合適。鍊錶跟陣列一樣,也是非常基礎 非常常用的...

用鍊錶和陣列實現佇列

佇列的原則是先進先出,主要有offer,poll,peek,isempty和size方法.用鍊錶實現 package test class node node int var public class queuetest else tail node size 元素出隊 public int pol...