数据结构-链表2-链式存储
生活随笔
收集整理的這篇文章主要介紹了
数据结构-链表2-链式存储
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
LinkList.h
#ifndef LINKLIST_H #define LINKLIST_H #define _CRT_SECURE_NO_WARNINGS #include<stdlib.h> #include<stdio.h> #include<string.h>//鏈表結點 typedef struct LINKNODE {void* data; //無類型指針,指向任何類型的數據struct LINKLIST* next; }LinkNode;//鏈表 typedef struct LINKLIST {LinkNode* head;int size;//不需要容量 }LinkList;//打印函數指針 typedef void(*PRINTLINKNODE)(void*);//初始化鏈表 LinkList* Init_LinkList();//指定位置插入 void Insert_LinkList(LinkList *list,int pos,void* data);//刪除指定位置的值 void Remove_LinkList(LinkList *list, int pos);//獲得鏈表的長度 int Size_LinkList(LinkList *list);//查找 int Find_linkList(LinkList *list, void* data);//返回第一個結點 void* GetFront_LinkList(LinkList *list);//打印鏈表結點 void Print_LinkList(LinkList *list, PRINTLINKNODE print);//釋放鏈表內存 void Free_LinkList(LinkList *list);#endifLinkList.c
#include"LinkList.h"//初始化鏈表 LinkList* Init_LinkList() {LinkList* list = (LinkList*)malloc(sizeof(LinkList));list->size = 0;//頭結點 是不保存數據信息的list->head = (LinkNode*)malloc(sizeof(LinkNode));list->head->data = NULL;list->head->next = NULL;return list; }//指定位置插入 void Insert_LinkList(LinkList *list, int pos, void* data) {if (list == NULL){return;}if (data == NULL){return;}//友好處理if (pos<0 || pos>list->size){pos = list->size;}//創建新的結點LinkNode* newnode = (LinkNode*)malloc(sizeof(LinkNode));newnode->data = data;newnode ->next= NULL;//找結點//輔助指針變量LinkNode *pCurrent = list->head;for (int i = 0; i < pos; i++){pCurrent = pCurrent->next;}//新結點插入newnode->next = pCurrent->next;pCurrent->next = newnode;list->size++; }//刪除指定位置的值 void Remove_LinkList(LinkList *list, int pos) {if (list == NULL){return;}if (pos < 0 || pos >= list->size){return;}//查找刪除結點的前一個結點LinkNode *pCurrent = list->head;for (int i = 0; i < pos; i++){pCurrent = pCurrent->next;}//緩存刪除的結點LinkNode* pDel = pCurrent->next;pCurrent->next = pDel->next;//釋放刪除結點的內存free(pDel);list->size--;}//獲得鏈表的長度 int Size_LinkList(LinkList *list) {return list->size; }//查找 int Find_linkList(LinkList *list, void* data) {if (list == NULL){return -1;}if (data == NULL){return -1;}//遍歷查找LinkNode* pCurrent = list->head->next;//指向第一個有效數字int i = 0;while (pCurrent!=NULL){if (pCurrent->data == data){break;}i++;pCurrent = pCurrent->next;}return i;}//返回第一個結點 void* GetFront_LinkList(LinkList *list) {LinkNode* node = list->head->next;return node->data; }//打印鏈表結點 void Print_LinkList(LinkList *list, PRINTLINKNODE print) {if (list == NULL){return;}//輔助指針變量LinkNode *pCurrent = list->head->next;while (pCurrent != NULL){print(pCurrent->data); //注意順序pCurrent = pCurrent->next;} }//釋放鏈表內存 void Free_LinkList(LinkList *list) {if (list == NULL){return;}//輔助指針變量LinkNode* pCurrent = list->head;while (pCurrent->next != NULL){//先緩存下一個結點,再刪除LinkNode* pNext = pCurrent->next;free(pCurrent);pCurrent = pNext;}//釋放鏈表內存list->size = 0;free(list); }單項鏈表.c
#define _CRT_SECURE_NO_WARNINGS #include<stdlib.h> #include<stdio.h> #include<string.h> #include"LinkList.h"typedef struct PERSON {char name[64];int age;int score;} Person; void MyPrint(void* data) {Person* p = (Person*)data;printf("Name:%s Age %d Score %d\n",p->name, p->age, p->score); }int main() {//創建鏈表LinkList* list = Init_LinkList();//創建數據Person p1 = { "aaa", 18, 100 };Person p2 = { "bbb", 19, 99 };Person p3 = { "ccc", 8, 45 };Person p4 = { "ddd", 27, 22 };Person p5 = { "eee", 34, 12 };//數據插入鏈表Insert_LinkList(list, 0, &p1);Insert_LinkList(list, 0, &p2);Insert_LinkList(list, 0, &p3);Insert_LinkList(list, 0, &p4);Insert_LinkList(list, 0, &p5);//打印Print_LinkList(list,MyPrint);//刪除p2Remove_LinkList(list, 3);//打印printf("刪除第四個后打印結果:\n");Print_LinkList(list, MyPrint);//返回第一個結點printf("-------------查找結果返回第一個結點--------------\n");Person* p = (Person*)GetFront_LinkList(list);printf("Name:%s Age %d Score %d\n", p->name, p->age, p->score);//銷毀列表Free_LinkList(list);system("pause");return 0; } ///打印結果/// /* Name:eee Age 34 Score 12 Name:ddd Age 27 Score 22 Name:ccc Age 8 Score 45 Name:bbb Age 19 Score 99 Name:aaa Age 18 Score 100 刪除第四個后打印結果: Name:eee Age 34 Score 12 Name:ddd Age 27 Score 22 Name:ccc Age 8 Score 45 Name:aaa Age 18 Score 100 -------------查找結果返回第一個結點-------------- Name:eee Age 34 Score 12 請按任意鍵繼續. . . */運行結果截圖:
總結
以上是生活随笔為你收集整理的数据结构-链表2-链式存储的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 多个服务器数据互通_5月23日部分服务器
- 下一篇: js 获取当前元素的父元素的父元素的id