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