做菠菜網(wǎng)站判多久seo關(guān)鍵詞優(yōu)化報價價格
摘錄于老師的教學(xué)課程~~(*?′╰╯`?)~~內(nèi)含鏈表、隊列、棧、循環(huán)隊列等詳細(xì)介紹~~
基礎(chǔ)知識系列 有空再繼續(xù)更~~~
目錄
【鏈表】
一、單鏈表
1、存儲結(jié)構(gòu):帶頭結(jié)點的單鏈表
2、單鏈表結(jié)點類型的定義
3、創(chuàng)建單鏈表
? ? ? ? 1)頭插法
? ? ? ? 2)尾插法
4、單鏈表插入結(jié)點
5、單鏈表刪除結(jié)點?編輯
6、單鏈表的遍歷模型
? ? ? ? 1)模型1:指向頭結(jié)點
????????2)模型2:指向首結(jié)點
二、雙鏈表
1、存儲結(jié)構(gòu):帶頭結(jié)點的雙鏈表
2、雙鏈表結(jié)點類型的定義
3、創(chuàng)建雙鏈表
? ? ? ? 1)頭插法
? ? ? ? 2)尾插法
4、雙鏈表插入結(jié)點
? ? ? ? 方法1:在第 i 位置插入,先定位到第 i-1 位置?編輯
? ? ? ? 方法2:在第 i 位置插入,定位到第 i 位置
5、雙鏈表刪除結(jié)點
? ? ? ? 方法1:刪除第 i 位置結(jié)點,先定位到第 i-1 位置
? ? ? ? 方法2:刪除第 i 位置結(jié)點,定位到第 i 位置?編輯
三、循環(huán)鏈表
1、循環(huán)單鏈表
2、循環(huán)雙鏈表
3、其他操作方法與單鏈表和雙鏈表操作一樣
【?!?/p>
一、順序棧
1、存儲結(jié)構(gòu)
2、順序棧類型的定義
3、順序棧的 四 要素
4、順序棧的運算(節(jié)選)
二、共享棧
1、存儲結(jié)構(gòu)
2、共享棧類型的定義
3、共享棧的 四 要素
三、鏈棧
1、存儲結(jié)構(gòu):帶頭結(jié)點的鏈棧
2、鏈棧結(jié)點類型的定義
3、鏈棧的 四 要素
4、鏈棧的運算(節(jié)選)
? ? ? ? 1)進(jìn)棧 Push(&s, e)
? ? ? ? 2)出棧 Pop(&s, &e)
? ? ? ? 3)取棧頂元素 GetTop(s, &e)
【隊列】
一、順序隊
1、存儲結(jié)構(gòu)
2、順序隊類型的定義
3、順序隊的 四 要素
4、順序隊的運算(節(jié)選)
二、鏈隊
1、存儲結(jié)構(gòu)
2、鏈隊結(jié)點類型的定義
3、鏈隊的 四 要素
4、鏈隊的運算(節(jié)選)
? ? ? ? 1)進(jìn)隊 enQueue(q , e)
? ? ? ? 2)出隊 deQueue(q ,?e)
三、變形鏈隊
1、變化要點
2、存儲結(jié)構(gòu)
3、變形鏈隊的 四 要素
四、雙端隊列
1、不受限的雙端隊列:兩端都可以進(jìn)行進(jìn)隊和出隊操作的隊列
2、輸出受限的雙端隊列:一端允許進(jìn)隊和出隊,另一端只允許進(jìn)隊
3、輸入受限的雙端隊列:一端允許進(jìn)隊和出隊,另一端只允許出隊
五、環(huán)形隊列(循環(huán)隊列)
1、環(huán)形隊列(循環(huán)隊列) 四 要素?
六、變形環(huán)形隊列
1、變化要點
2、變形環(huán)形隊列類型的定義
3、變形環(huán)形隊列的 四 要素
【鏈表】
一、單鏈表
1、存儲結(jié)構(gòu):帶頭結(jié)點的單鏈表
2、單鏈表結(jié)點類型的定義
typedef struct LNode // 定義單鏈表節(jié)點類型
{ElemType data; // 節(jié)點的數(shù)據(jù)部分,類型為 ElemType(通常是自定義的數(shù)據(jù)類型)struct LNode *next; // 指向后繼結(jié)點
}LinkNode; // 將結(jié)構(gòu)體命名為 LinkNode
? 如圖:??
3、創(chuàng)建單鏈表
? ? ? ? 1)頭插法
????????
? ? ? ? 代碼理解:先接s后面,再接s前面
? ? ? ? 2)尾插法
? ? ? ? 代碼理解:先接s前面,再收s后面
4、單鏈表插入結(jié)點
? ? ? ? 代碼理解:先cv后面(先接s后面),再接s前面
5、單鏈表刪除結(jié)點
? ? ? ? 代碼理解:直指后一位,跳過中間
6、單鏈表的遍歷模型
? ? ? ? 1)模型1:指向頭結(jié)點
? ? ? ?
? ?????????循環(huán)初始條件:p?指向鏈表的頭節(jié)點 L 。(意味著循環(huán)將從頭節(jié)點開始)
? ? ? ? ? ?循環(huán)結(jié)束條件:循環(huán)在當(dāng)前節(jié)點的下一個節(jié)點不為空時繼續(xù)執(zhí)行。(意味著循環(huán)會只遍歷到倒數(shù)第二個節(jié)點,并且不會打印最后一個節(jié)點的數(shù)據(jù))
????????2)模型2:指向首結(jié)點
????????
???????????循環(huán)初始條件:p 指向鏈表的第一個有效節(jié)點(即 L ->next?,
意味著循環(huán)將從第一個有效節(jié)點開始,跳過了頭節(jié)點)。
? ? ? ? ? ?循環(huán)結(jié)束條件:循環(huán)在 p 不為空時繼續(xù)執(zhí)行。(意味著循環(huán)會遍歷整個鏈表,包括最后一個節(jié)點)
二、雙鏈表
1、存儲結(jié)構(gòu):帶頭結(jié)點的雙鏈表
??
2、雙鏈表結(jié)點類型的定義
typedef struct DNode //雙鏈表結(jié)點類型
{ElemType data;struct DNode *prior; //指向前驅(qū)結(jié)點struct DNode *next; //指向后繼結(jié)點
}DlinkNode;
3、創(chuàng)建雙鏈表
? ? ? ? 1)頭插法
?????
? ? ? ? 代碼理解:先接s后面,判斷是否后能回扣s,再接s前面,前回扣s
? ? ? ? 2)尾插法
? ? ??
? ? ? ? 代碼理解:先接s前面,后s回扣前面,最后r(即舊的s,新的r)指空
4、雙鏈表插入結(jié)點
? ? ? ? 方法1:在第 i 位置插入,先定位到第 i-1 位置
? ? ? ? 代碼理解:先s接,后回扣;先接后,再接前
? ? ? ? 方法2:在第 i 位置插入,定位到第 i 位置
? ??
? ??
5、雙鏈表刪除結(jié)點
? ? ? ? 方法1:刪除第 i 位置結(jié)點,先定位到第 i-1 位置
? ? ? ? 代碼理解:跳過結(jié)點,往下直指下一位,下一位回扣上一位
? ? ? ? 方法2:刪除第 i 位置結(jié)點,定位到第 i 位置
三、循環(huán)鏈表
1、循環(huán)單鏈表
? ? ?
2、循環(huán)雙鏈表
3、其他操作方法與單鏈表和雙鏈表操作一樣
【?!?/h2>
一、順序棧
1、存儲結(jié)構(gòu)
????????
2、順序棧類型的定義
typedef struct
{ElemType data[MaxSize]; //大小為 MaxSize,用于存儲棧中的元素int top; //棧頂指針
}SqStack;
3、順序棧的 四 要素
? ?
? ? ? ? 代碼理解:由于棧從0開始記,所以???/strong>為-1,棧滿為最大(MaxSize)減一;
??????????????????????????進(jìn)棧,先加后進(jìn);退棧,先取后減;
4、順序棧的運算(節(jié)選)
? ? ? ? 要記得判斷是否棧滿與棧空
二、共享棧
1、存儲結(jié)構(gòu)
??
? ? ? ? 兩頭往中間增,空間共享
2、共享棧類型的定義
typedef struct
{ElemType data[MaxSize]; //存放共享棧中元素int top1,top2; //兩個棧的棧頂指針
}DStack;
3、共享棧的 四 要素
??
? ? ? ? 代碼理解:
??????????諡閮芍羔樦羶蓷M?#xff08;-1,MaxSize);
? ? ? ? 棧滿為兩指針相鄰;
? ? ? ? 進(jìn)棧,top1進(jìn)則先加再進(jìn)(top1為左),top2進(jìn)則先減再進(jìn)(top2為右),都為向中靠攏
? ? ? ? 出棧,top1出則先取再減(top1為左),top2出則先取再加(top2為右),都為向兩邊取
三、鏈棧
1、存儲結(jié)構(gòu):帶頭結(jié)點的鏈棧
??
2、鏈棧結(jié)點類型的定義
typedef struct linknode
{ElemType data; //數(shù)據(jù)域struct linknode *next; //指針域
}LinkStNode;
3、鏈棧的 四 要素
??
? ? ? ? 鏈棧棧滿取決于電腦的內(nèi)存設(shè)置,所以不考慮;
? ? ? ? ??占礊轭^結(jié)點s下一位為空;
????????
4、鏈棧的運算(節(jié)選)
? ? ? ? 1)進(jìn)棧 Push(&s, e):? 要點:鏈表的頭插法插入結(jié)點
????????
? ? ? ? 代碼理解:頭插-先接后再接前
? ? ? ? 2)出棧 Pop(&s, &e):? 要點:刪除鏈表的首結(jié)點
????????
? ? ? ? 代碼理解:跳過刪除結(jié)點連上,釋放節(jié)點
? ? ? ? 3)取棧頂元素 GetTop(s, &e):
????????
? ? ? ? 代碼理解:取棧頂賦值于e
【隊列】
一、順序隊
1、存儲結(jié)構(gòu)
??
2、順序隊類型的定義
typedef struct
{ElemtType data[MaxSize];int front,rear; //隊首和隊尾指針
}SqQueue;
3、順序隊的 四 要素
? ? ? ? rear指向隊尾元素;front指向隊頭元素的前一個位置。
??
? ? ? ? 代碼理解:隊空為重合,隊滿尾最高;進(jìn)隊尾加后入,出隊前加后出;
4、順序隊的運算(節(jié)選)
1)進(jìn)隊列 enQueue(q,e):在隊列不滿的條件下,將隊尾指針 rear 增 1,然后將元素添加到該位置。
2)出隊列 deQueue(q,e):在隊列不為空的條件下,將隊首指針 front 循環(huán)增 1,并將該位置的元素值賦給 e。
? ? ? ? ??
二、鏈隊
1、存儲結(jié)構(gòu)
? ?
????????一個鏈隊的組成,包含兩種類型的結(jié)點:
????????? ?(1)存儲隊列數(shù)據(jù)元素的鏈表結(jié)點
? ? ? ? ? ?(2)存儲隊頭和隊尾指針的鏈隊頭結(jié)點
2、鏈隊結(jié)點類型的定義
? ? ? ? 鏈隊的數(shù)據(jù)節(jié)點類型DataNode?
typedef qnode
{ElemType data; //數(shù)據(jù)元素struct qnode *next;
}DataNode;
? ? ? 鏈隊的頭結(jié)點類型LinkQuNode
typedef struct
{DataNode *front; //指向單鏈表隊頭結(jié)點DataNode *rear; //指向單鏈表隊尾結(jié)點
}LinkQuNode;
3、鏈隊的 四 要素
? ? 代碼理解:隊空為前后指向空;鏈隊隊滿取決于內(nèi)存大小,不考慮;進(jìn)隊尾插法,出隊從頭刪;
4、鏈隊的運算(節(jié)選)
? ? ? ? 1)進(jìn)隊 enQueue(q , e)
? ? ? ? 代碼理解:先判隊是否為空,是則既頭又尾,否則尾插進(jìn)入,接前再接尾;
? ? ? ? 2)出隊 deQueue(q ,?e)
????????
? ? ? ? 代碼理解:刪前先判斷,為空則回錯(return false),t指首結(jié)點;為獨則設(shè)空,前后都指空;為多則好刪,跳格接前再存值,最后再釋放;
三、變形鏈隊
1、變化要點
? ? ? ? 使用循環(huán)雙鏈表,保留隊尾指針rear。(隊頭指針可通過rear->next得出)
2、存儲結(jié)構(gòu)
????????????????
? ? ? ? 尾指針rear會回指到隊頭
3、變形鏈隊的 四 要素
??????????????????
? ? ? ? 代碼理解:隊滿看內(nèi)存,不考慮;隊空則尾指為空;進(jìn)隊則尾插法;出隊則刪頭;
四、雙端隊列
1、不受限的雙端隊列:兩端都可以進(jìn)行進(jìn)隊和出隊操作的隊列
? ? ? ?
? ? ? ? 兩端都可進(jìn)出
2、輸出受限的雙端隊列:一端允許進(jìn)隊和出隊,另一端只允許進(jìn)隊
? ? ? ? ?
? ? ? ? 出口唯一,兩端可進(jìn);后進(jìn)為兩邊,先進(jìn)在中間;
3、輸入受限的雙端隊列:一端允許進(jìn)隊和出隊,另一端只允許出隊
????????
? ? ? ? 進(jìn)口唯一,兩端可進(jìn);出隊結(jié)果看兩邊;
五、環(huán)形隊列(循環(huán)隊列)
1、環(huán)形隊列(循環(huán)隊列) 四 要素? ?? ?
? ? ? ? 代碼理解:隊空為重疊;隊滿則相鄰(尾指針的下一個位置等于頭指針的位置,犧牲一個元素);進(jìn)隊從尾進(jìn),出隊從頭出;
? ? ? ? 涉及環(huán)形更新指針解析:
六、變形環(huán)形隊列
1、變化要點:
????????取消尾指針,利用隊列中元素個數(shù)代替隊尾指針
2、變形環(huán)形隊列類型的定義
typedef struct
{ElemType data[MaxSize];int front; //隊頭指針int count; //隊列中元素個數(shù)
}QuType;
3、變形環(huán)形隊列的 四 要素
????????
? ? ? ? 代碼解析:可參照環(huán)形隊列;多了一個count來作為計數(shù)(記空與滿),方便很多;