欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

概述

給需要考研的同學(xué)一個(gè)參考,單鏈表作為常見(jiàn)數(shù)據(jù)結(jié)構(gòu)的一種,這里記錄C語(yǔ)言實(shí)現(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é)點(diǎn)結(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é)點(diǎn))
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é)點(diǎn))

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

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

 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)前沒(méi)有超出范圍
	 if (current == NULL) {
		 return false;
	 }
	 //創(chuàng)建新節(jié)點(diǎn)
	 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é)點(diǎn))

 bool inserteEndLNodeFromTargetValue(LNode* head, ElementType target, ElementType data) {
	 LNode* current = head;
	 while (current != NULL) {
		 if (current->data == target) {
			 break;
		 }
		 current = current->next;
	 }
	 //確保當(dāng)前沒(méi)有超出范圍
	 if (current == NULL) {
		 return false;
	 }
	 //創(chuàng)建新節(jié)點(diǎn)
	 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é)點(diǎn))

 bool inserteBeforeLNodeFromTargetValue(LNode* head, ElementType target, ElementType data) {
	 LNode* current = head;
	 while (current != NULL) {
		 if (current->data == target) {
			 break;
		 }
		 current = current->next;
	 }
	 //確保當(dāng)前沒(méi)有超出范圍
	 if (current == NULL) {
		 return false;
	 }
	 //創(chuàng)建新節(jié)點(diǎn)
	 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é)點(diǎn))

 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)前沒(méi)有超出范圍
	 if (current == NULL) {
		 return false;
	 }
	 //更改指針指向
	 LNode* temp = current->next;
	 current->next = current->next->next;
	 //釋放斷開(kāi)節(jié)點(diǎn)的內(nèi)存空間
	 free(temp);
	 return true;
 }

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

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

鏈表查找對(duì)應(yīng)的節(jié)點(diǎn)

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

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

相關(guān)文章

最新評(píng)論