1. 程式人生 > >第三章學習小結

第三章學習小結

了解 ext 數組的數組 數據 執行 解決 空間 lin 匹配

.第三章學習了棧和隊列,有了第二章對線性表的學習,已經了解學習的一個思維過程,在這裏分享一下。例如學習棧,首先要了解它的存取特點,然後是學習它的ADT,然後從具體的方面學習,分別從兩種不同的存儲結構來探討它具體操作的實現。這個是整個數據結構學習的基本思路,掌握了思路,我覺得對於理清楚整一本書很有幫助。

2.在對於棧的學習,課本上給出的案例是括號匹配問題,還有簡單的四則運算,在解決這兩個問題的時候,要考慮到數據是先進後出,才想到采用棧結構。並且在打代碼之前,一定要加以詳細的註釋,通常會有一些很小的bug,看了老半天看不出來。解題先用文字大概將算法寫出來,再慢慢完善算法裏所欠缺的。

3.對於隊列的學習,個人覺得較為重要的一點是要對隊列是否帶頭節點來操作,認真分析,這樣能夠對整個隊列掌握得更透徹,這裏分享一下老師的代碼

鏈式隊列的實現:

一、類型定義
typedef struct node{
ElemType data;
struct node *next;
}LNode;

typedef struct{
LNode *front;
LNode *rear;
}LinkQueue;

二、各種操作的實現分析

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;//Q.front被賦值為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; //Q.front->next被賦值為NULL
e = p->data;
delete p;

4.遇到問題都是一些很細微的問題,例如對string的用法不太了解,在定義數組的數組的時候,要輸入變量值才能定義

5.接下來多看源碼,不懂多百度多問

第三章學習小結