Learing Log 3
姓名:劉星辰 今日學習任務 學習瞭解資料結構中佇列的結構;佇列中順序儲存結構及鏈式儲存結構的功能函式程式碼編寫 今日任務完成情況 本日任務按計劃完成,今日開發程式碼量:約500行 今日開發中出現的問題彙總 ①順序儲存佇列功能函式中進隊、出隊的程式碼實現功能的流程還存在一些不太清楚; ②鏈式儲存佇列功能函式,何時需要釋放結點,還不太明確。 今日未解決問題 無 今日開發收穫 ①清楚了資料結構中佇列資料額結構模型; ②瞭解了佇列的特點和屬性; ③瞭解並完成了關於順序佇列的簡單功能函式程式碼編寫; ④瞭解並完成了關於鏈式佇列的簡單功能函式程式碼編寫。 ⑤熟悉了圖形介面進入文字編輯器進行程式碼編寫操作的流程。 自我評價
佇列結構(兩個埠):先進先出 型別:順序儲存(連續)、鏈式儲存(不連續) 迴圈佇列(順序儲存)
空隊:隊頭隊尾重合 隊尾指標:指向最後一個元素的後一個(指標下標為MAXSIZE - 1) 迴圈佇列的長度:
(rear – front + MAXSIZE)% MAXSIZE
判斷佇列是否滿:
(rear + 1)% MAXSIZE == front;
用程式碼表示一個佇列:
struct queue
{
int *data;
int front;
int rear;
};
vim 單詞補齊快捷鍵Ctrl+N
順序儲存佇列功能函式: ★佇列初始化:front、rear同指向0,申請記憶體並讓data指標指向這塊空間。 ★進隊操作:①進隊判斷,如果隊滿,無法進隊。 ②操作隊尾,放入資料
q->data[q->rear]=e
q->rear=(q->rear+1)%MAXSIZE
★出隊操作:①出隊判斷,如果空隊,無法出隊。 ②操作隊頭,移出資料
int e=q->data[q->front]
q->front=(q->front+1 )%MAXSIZE
★求佇列長度:
(q.rear – q.front + MAXSIZE) % MAXSIZE;
★清除佇列:
q->rear = q->front;
★釋放佇列:釋放之前索要的空間,防止資料洩露。
free(q->data); q->data = NULL;
鏈式儲存佇列功能函式: 相比順序儲存佇列,多一個節點資訊(資料域、指標域) ★佇列初始化:front、rear同指向頭結點,申請頭節點空間及佇列資訊空間。 ★進隊操作:不存在隊滿,有資料,就申請空間。新節點地址放進前一個指標域裡。
q->rear->next = p;
q->rear = p;
★出隊操作:①出隊判斷,如果空隊,無法出隊。 ②操作對頭指標
q->front->next = p->next;
free(p);
特:只剩一個節點的情況。
If (q-> == p)
{
q->rear = q->front;
}
★求佇列長度:
Node *p = q ->front->next;
while (p)
{
length++;
p = p->next
}
★清除佇列:釋放節點後指向新的節點。最後要刪完所有節點,隊尾指標指向開頭。 ★判斷佇列是否為空:
(q->front == q->rear)? SUCCESS:FAILURE;
★銷燬佇列:釋放頭結點及佇列資訊;
free((*q->front); free(*q);