.第三章學習了棧和佇列,有了第二章對線性表的學習,已經了解學習的乙個思維過程,在這裡分享一下。例如學習棧,首先要了解它的訪問特點,然後是學習它的adt,然後從具體的方面學習,分別從兩種不同的儲存結構來**它具體操作的實現。這個是整個資料結構學習的基本思路,掌握了思路,我覺得對於理清楚整一本書很有幫助。
2.在對於棧的學習,課本上給出的案例是括號匹配問題,還有簡單的四則運算,在解決這兩個問題的時候,要考慮到資料是先進後出,才想到採用棧結構。並且在打**之前,一定要加以詳細的注釋,通常會有一些很小的bug,看了老半天看不出來。解題先用文字大概將演算法寫出來,再慢慢完善演算法裡所欠缺的。
3.對於佇列的學習,個人覺得較為重要的一點是要對佇列是否帶頭節點來操作,認真分析,這樣能夠對整個佇列掌握得更透徹,這裡分享一下老師的**
鏈式佇列的實現:
一、型別定義
typedef struct nodelnode;
typedef structlinkqueue;
二、各種操作的實現分析
1、初始化
linkqueue q;
不帶頭:q.front = null; q.rear = null;
帶頭:q.front = new lnode; q.front->next = null; q.rear = q.front;
2、判斷隊空
不帶頭:q.front==null 或者:q.rear==null
帶頭:q.front->next==null 或者:q.front==q.rear
3、判斷隊滿()//由new申請空間後判斷,故無需定義該函式
4、在隊頭入隊
不帶頭空佇列:p = new lnode;
cin >> p->data;
p->next = null;
q.rear = p;
q.front = q.rear; //本情況獨有
不帶頭1個結點:p = new lnode;
cin >> p->data;
p->next = null;
q.rear->next = p; //本情況獨有
q.rear = p;
不帶頭2個結點://同上
帶頭空佇列:p = new lnode;
cin >> p->data;
p->next = null;
q.rear->next = p;
q.rear = p;
帶頭1個結點://同上
帶頭2個結點://同上
5、在隊頭出隊
不帶頭1個結點:p = q.front;
q.front = q.front->next;被賦值為null
e = p->data;
delete p;
q.rear = null; //本情況獨有,將rear恢復到初始狀態
不帶頭2個結點:p = q.front;
q.front = q.front->next;
e = p->data;
delete p;
帶頭1個結點:p = q.front->next;
e = p->data;
q.front->next = p->next;
delete p;
q.rear = q.front; //本情況獨有,將rear恢復到初始狀態
//上面語句的執行條件:空對列
帶頭2個結點:p = q.front->next;
q.front->next = p->next; ->next被賦值為null
e = p->data;
delete p;
4.遇到問題都是一些很細微的問題,例如對string的用法不太了解,在定義陣列的陣列的時候,要輸入變數值才能定義
第三章小結
第三章學習了棧和佇列。棧,後進先出 lifo 只在棧頂 top 進行操作 佇列,先進先出 fifo 在隊頭 front 進行刪除,在隊尾 rear 進行入隊。其儲存結構的定義則可對照上一章的順序表及鍊錶的定義,知識的串接及對知識的靈活應用,讓學習變得容易些。在完成作業的過程中,發現要解決它必須多方面...
3 5 第三章小結
3.5 第三章小結 在這一章,我們通過實踐 了基本的函式結構和技術。首先,用 let 繫結宣告值和函式,知道了 f 能夠使必須的概念數量最小化,從嚴謹的數學觀點來看,不可變值就是不帶引數的函式。接下來,我們討論了函式語言中最簡單的不可變資料結構 元組,演示了不可變資料結構的用法。用不可變資料結構進行...
DS第三章小結
一 你對本章內容的小結 本章主要講了兩種特殊的線性表,棧和佇列。棧是僅在表尾進行插入或刪除操作且後進先出 lifo 的線性表,而佇列則是在表的一端插入,另一端刪除元素且先進先出 fifo 的線性表。同時,課本的案例引入告訴我們,棧可以解決數值的轉換,括號匹配的檢驗問題 而佇列因其結構的吻合可以用了舞...