最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言實現(xiàn)單鏈表的示例詳解

 更新時間:2023年09月19日 10:40:58   作者:gnip  
給需要考研的同學(xué)一個參考,單鏈表作為常見數(shù)據(jù)結(jié)構(gòu)的一種,這里記錄C語言實現(xiàn)單鏈表,文章通過代碼示例介紹的非常詳細,具有一頂?shù)膮⒖純r值,需要的朋友可以參考下

概述

給需要考研的同學(xué)一個參考,單鏈表作為常見數(shù)據(jù)結(jié)構(gòu)的一種,這里記錄C語言實現(xiàn)單鏈表。

代碼

函數(shù)原型和結(jié)構(gòu)體聲明

#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
#define true 1
#define false 0
#define bool char
//鏈表數(shù)據(jù)類型
typedef int ElementType;
//鏈表節(jié)點結(jié)構(gòu)體
typedef struct LNode {
	ElementType data;
	struct LNode* next;
} LNode;
bool intLNode(LNode** head);
bool insertLNodeFromPos(LNode* head, int pos, ElementType data);
bool inserteEndLNodeFromTargetValue(LNode* head, ElementType target, ElementType data);
bool inserteBeforeLNodeFromTargetValue(LNode* head, ElementType target, ElementType data);
bool deleteFromPos(LNode* head, int pos);
//鏈表按值刪除(帶頭節(jié)點)
bool deleteFromTargetValue(LNode* head, LNode* node);
LNode* query(LNode* head, ElementType target);

main函數(shù)

int main() {
	LNode *head ;
	intLNode(&head);
	insertLNodeFromPos(head, 1, 1);
	insertLNodeFromPos(head, 2, 2);
	insertLNodeFromPos(head, 1, 101);
	inserteEndLNodeFromTargetValue(head, 2, 221);
	inserteBeforeLNodeFromTargetValue(head, 2, 333);
	//deleteFromPos(head, 3);
	deleteFromTargetValue(head, head->next->next->next);
	printf("%d",head->next->next->next->data);
	//printf("%d", query(head, 101)->data);
	return 0;
}

初始化(帶頭節(jié)點)

 bool intLNode(LNode** head) {
	 *head = (LNode*)malloc(sizeof(LNode));
	 if (*head == NULL) {
		 return false;
	 }
	 (*head)->data = 0;
	 (*head)->next = NULL;
	 return true;
}

鏈表按位置插入(帶頭節(jié)點)

 bool insertLNodeFromPos(LNode* head,int pos, ElementType data) {
	 //邊界值判斷
	 if (pos < 1) {
		 return false;
	 }
	 LNode* current = head;
	 int index = 0;
	 while (current!=NULL) {
		 if (index == pos - 1) {
			 break;
		}
		 current = current->next;
		 index++;
	}
	 //確保當(dāng)前沒有超出范圍
	 if (current == NULL) {
		 return false;
	 }
	 //創(chuàng)建新節(jié)點
	 LNode* newNode = (LNode*)malloc(sizeof(LNode));
	 if (newNode == NULL) {
		 return false;
	 }
	 //更改指針指向
	 newNode->data = data;
	 newNode->next = current->next;
	 current->next = newNode;
	 return true;
 }

鏈表按數(shù)據(jù)值后插入(帶頭節(jié)點)

 bool inserteEndLNodeFromTargetValue(LNode* head, ElementType target, ElementType data) {
	 LNode* current = head;
	 while (current != NULL) {
		 if (current->data == target) {
			 break;
		 }
		 current = current->next;
	 }
	 //確保當(dāng)前沒有超出范圍
	 if (current == NULL) {
		 return false;
	 }
	 //創(chuàng)建新節(jié)點
	 LNode* newNode = (LNode*)malloc(sizeof(LNode));
	 if (newNode == NULL) {
		 return false;
	 }
	 //更改指針指向
	 newNode->data = data;
	 newNode->next = current->next;
	 current->next = newNode;
	 return true;
 }

鏈表按數(shù)據(jù)值前插入(帶頭節(jié)點)

 bool inserteBeforeLNodeFromTargetValue(LNode* head, ElementType target, ElementType data) {
	 LNode* current = head;
	 while (current != NULL) {
		 if (current->data == target) {
			 break;
		 }
		 current = current->next;
	 }
	 //確保當(dāng)前沒有超出范圍
	 if (current == NULL) {
		 return false;
	 }
	 //創(chuàng)建新節(jié)點
	 LNode* newNode = (LNode*)malloc(sizeof(LNode));
	 if (newNode == NULL) {
		 return false;
	 }
	 //更改指針指向
	 newNode->data = current->data;
	 newNode->next = current->next;
	 current->next = newNode;
	 current->data = data;
	 return true;
 }

鏈表按位置刪除(帶頭節(jié)點)

 bool deleteFromPos(LNode* head, int pos) {
	 if (pos < 1) {
		 return false;
	 }
	 LNode* current = head;
	 int index = 0;
	 while (current != NULL) {
		 if (index==pos-1) {
			 break;
		 }
		 current = current->next;
		 index++;
	 }
	 //確保當(dāng)前沒有超出范圍
	 if (current == NULL) {
		 return false;
	 }
	 //更改指針指向
	 LNode* temp = current->next;
	 current->next = current->next->next;
	 //釋放斷開節(jié)點的內(nèi)存空間
	 free(temp);
	 return true;
 }

鏈表按指定節(jié)點刪除(帶頭節(jié)點)

 bool deleteFromTargetValue(LNode* head,LNode *node) {
	 LNode* current = head;
	 while (current != NULL) {
         //找到需要刪除的節(jié)點的前一個節(jié)點
		 if (current->next == node) {
			 break;
		 }
		 current = current->next;
	 }
	 //確保當(dāng)前沒有超出范圍
	 if (current == NULL) {
		 return false;
	 }
	 //更改指針指向
	 LNode* temp = current->next;
	 current->next = current->next->next;
	 free(temp);
	 return true;
 }

鏈表查找對應(yīng)的節(jié)點

 LNode* query(LNode* head, ElementType target) {
	 LNode* current = head;
	 while (current != NULL) {
		 if (current->data == target) {
			 break;
		 }
		 current = current->next;
	 }
	 //確保當(dāng)前沒有超出范圍
	 if (current == NULL) {
		 return NULL;
	 }
	 return current;
 }

以上就是C語言實現(xiàn)單鏈表的示例詳解的詳細內(nèi)容,更多關(guān)于C語言實現(xiàn)單鏈表的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • LintCode 堆化詳解及實例代碼

    LintCode 堆化詳解及實例代碼

    這篇文章主要介紹了LintCode 堆化詳解及實例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • 淺談C語言中include

    淺談C語言中include""與include<>的區(qū)別

    C語言中包含文件有兩種包含符號,一個是<>尖括號,另一個是""雙引號。那么這兩個有什么區(qū)別呢?本文就詳細的介紹一下,感興趣的可以了解一下
    2021-06-06
  • VC++實現(xiàn)選擇排序算法簡單示例

    VC++實現(xiàn)選擇排序算法簡單示例

    這篇文章主要介紹了VC++實現(xiàn)選擇排序算法簡單示例,代碼簡潔易懂,有助于讀者對數(shù)據(jù)結(jié)構(gòu)與算法的學(xué)習(xí),需要的朋友可以參考下
    2014-08-08
  • Linux下C語言實現(xiàn)C/S模式編程

    Linux下C語言實現(xiàn)C/S模式編程

    這篇文章主要為大家詳細介紹了Linux下C語言實現(xiàn)C/S模式編程的相關(guān)資料,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-01-01
  • C++ 中

    C++ 中"emplace_back" 與 "push_back" 的區(qū)別

    這篇文章主要介紹了C++ 中"emplace_back" 與 "push_back" 的區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • C語言實現(xiàn)出棧序列合法性判定

    C語言實現(xiàn)出棧序列合法性判定

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)出棧序列合法性判定,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • C語言菜鳥基礎(chǔ)教程之for循環(huán)

    C語言菜鳥基礎(chǔ)教程之for循環(huán)

    c語言中的for循環(huán)語句使用最為靈活,不僅可以用于循環(huán)次數(shù)已經(jīng)確定的情況,而且可以用于循環(huán)次數(shù)不確定而只給出循環(huán)結(jié)束條件的情況,它完全可以代替while語句.
    2017-10-10
  • C++實現(xiàn)STL容器的示例

    C++實現(xiàn)STL容器的示例

    本文主要介紹了C++實現(xiàn)STL容器的示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-02-02
  • 使用C語言詳解霍夫曼樹數(shù)據(jù)結(jié)構(gòu)

    使用C語言詳解霍夫曼樹數(shù)據(jù)結(jié)構(gòu)

    這篇文章主要介紹了使用C語言詳解霍夫曼樹數(shù)據(jù)結(jié)構(gòu),包括一道AMC相關(guān)的例題演示需要的朋友可以參考下
    2015-08-08
  • C++?Boost?CircularBuffer算法超詳細精講

    C++?Boost?CircularBuffer算法超詳細精講

    Boost是為C++語言標準庫提供擴展的一些C++程序庫的總稱。Boost庫是一個可移植、提供源代碼的C++庫,作為標準庫的后備,是C++標準化進程的開發(fā)引擎之一,是為C++語言標準庫提供擴展的一些C++程序庫的總稱
    2022-11-11

最新評論

通许县| 铁岭县| 八宿县| 廊坊市| 阿勒泰市| 清流县| 邛崃市| 广宗县| 会同县| 奇台县| 嘉鱼县| 屯门区| 洛川县| 石阡县| 柳州市| 宜川县| 瑞金市| 错那县| 武夷山市| 三门县| 泸水县| 永春县| 留坝县| 山阳县| 霍林郭勒市| 晋城| 皮山县| 渝中区| 潮安县| 永寿县| 陇南市| 邯郸县| 正定县| 垣曲县| 通州市| 五河县| 宁安市| 三江| 司法| 昔阳县| 麻阳|