一、棧和佇列的基本概念
1.棧是一種線性表無疑。一般提供兩種操作:入棧(push) 和出棧( pop)。分別對應著資料插入和資料刪除。
佇列的話,也是一種線性表。和棧不同的是,棧只能在棧頂操作(push&pop),而佇列被限制為從一端入,從另一端出。
這裡的棧和佇列指的都是最一般的情況。
2.棧是先進後出的(first in last out, filo),佇列是先進先出的(first in first out, fifo)。
從真題來看,這部分題考概念的比較簡單。
二、棧和佇列的順序儲存結構
1、順序棧
1//定義
2 typedef struct
3sqstack;
考試的時候,簡單的可以這麼寫
1int 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 struct2sqqueue;
3、迴圈佇列
front和rear迴圈。
rear不能超過front一圈。
這部分內容比較繞的就是迴圈佇列,還有就是隊頭隊尾的位置判斷,還有對隊列為空和為滿的判斷。
三、棧和佇列的鏈式儲存結構
1、棧 鏈式實現
1 typedef structlnode
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 structqnode
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...