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

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

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

概述

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

代碼

函數(shù)原型和結構體聲明

#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
#define true 1
#define false 0
#define bool char
//鏈表數(shù)據(jù)類型
typedef int ElementType;
//鏈表節(jié)點結構體
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++;
	}
	 //確保當前沒有超出范圍
	 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;
	 }
	 //確保當前沒有超出范圍
	 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;
	 }
	 //確保當前沒有超出范圍
	 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++;
	 }
	 //確保當前沒有超出范圍
	 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;
	 }
	 //確保當前沒有超出范圍
	 if (current == NULL) {
		 return false;
	 }
	 //更改指針指向
	 LNode* temp = current->next;
	 current->next = current->next->next;
	 free(temp);
	 return true;
 }

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

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

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

相關文章

  • LintCode 堆化詳解及實例代碼

    LintCode 堆化詳解及實例代碼

    這篇文章主要介紹了LintCode 堆化詳解及實例代碼的相關資料,需要的朋友可以參考下
    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ù)結構與算法的學習,需要的朋友可以參考下
    2014-08-08
  • Linux下C語言實現(xiàn)C/S模式編程

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新評論

青河县| 宁陕县| 淅川县| 姚安县| 杭州市| 桃园县| 新民市| 准格尔旗| 本溪| 涿鹿县| 乳山市| 江津市| 镇赉县| 申扎县| 宜川县| 青铜峡市| 怀柔区| 离岛区| 和硕县| 拉萨市| 龙井市| 奇台县| 湖口县| 曲沃县| 海口市| 定襄县| 孝昌县| 桃园县| 延安市| 登封市| 长武县| 嵊州市| 蓝山县| 河间市| 河南省| 汝南县| 雷山县| 莒南县| 浠水县| 灵山县| 扶绥县|