日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

数据结构一:链表(linux链表)

發(fā)布時(shí)間:2025/3/12 linux 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构一:链表(linux链表) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一:實(shí)現(xiàn)機(jī)制

linux鏈表實(shí)現(xiàn)思想就是:結(jié)點(diǎn)里面只創(chuàng)建一個(gè)next指針,用指針將各個(gè)結(jié)點(diǎn)相連接 打印和查找的時(shí)候,再進(jìn)行類型的轉(zhuǎn)換

二:代碼

1 LinkList.h

/* LinkList.h linux鏈表實(shí)現(xiàn)思想就是:結(jié)點(diǎn)里面只創(chuàng)建一個(gè)next指針,用指針將各個(gè)結(jié)點(diǎn)相連接 打印和查找的時(shí)候,在進(jìn)行類型的轉(zhuǎn)換 */ #ifndef _LINKLIST_H_ #define _LINKLIST_H_ #include<stdlib.h> #include<stdio.h>//鏈表小結(jié)點(diǎn) 和普通鏈表相比較 沒(méi)有數(shù)據(jù)域 只有next指針 typedef struct LINNODE{struct LINNODE *next; }Link_Node; //鏈表,有頭結(jié)點(diǎn)和長(zhǎng)度 typedef struct LINKLIST{Link_Node head;// Link_Node的結(jié)構(gòu)體,而不是結(jié)構(gòu)體指針 int size;//結(jié)點(diǎn)個(gè)數(shù) }Link_List; //查找回調(diào)函數(shù) typedef int (*FIND)(Link_Node *data1,Link_Node *data2); //打印回調(diào)函數(shù) typedef void (*PRINT)(Link_Node *data);//初始化 Link_List *_Init_(); //插入 void _Insert(Link_List *list,int pos,Link_Node *data);//插入的是Link_Node的指針 //刪除 void _Delete(Link_List *list,int pos); //查找 int _Find(Link_List *list,Link_Node *data,FIND my_Find); //打印 void _Print(Link_List *list,PRINT my_Print); //結(jié)點(diǎn)個(gè)數(shù)size int _Size(Link_List *list); //釋放內(nèi)存 void _Free(Link_List *list);#endif

2 LinkList.c

/* LinkList.c */ #include "LinkList.h"//初始化 Link_List *_Init_(){Link_List *list=(Link_List*)malloc(sizeof(Link_List));list->head.next=NULL;list->size=0;return list; } //插入 void _Insert(Link_List *list,int pos,Link_Node *data){//插入的是Link_Node的指針Link_Node *Current_Node=&(list->head);for(int i=0;i<pos;i++){//查找插入位置的前一個(gè)結(jié)點(diǎn) Current_Node=Current_Node->next; }//插入data->next=Current_Node->next;Current_Node->next=data;list->size++; } //刪除 void _Delete(Link_List *list,int pos){Link_Node *Current_Node=&(list->head);for(int i=0;i<pos;i++){//查找插入位置的前一個(gè)結(jié)點(diǎn) Current_Node=Current_Node->next; }Current_Node->next=Current_Node->next->next; list->size--; }//查找 int _Find(Link_List *list,Link_Node *data,FIND my_Find){Link_Node *Current_Node=&(list->head);int pos=-1;int flag=-1;while(Current_Node!=NULL){if(my_Find(Current_Node,data)==0){//查找到了 //pos=flag;return flag;break;}flag++;Current_Node=Current_Node->next;}return flag; } //打印 void _Print(Link_List *list,PRINT my_Print){//打印頭結(jié)點(diǎn)不需要考慮for(Link_Node *Current_Node=list->head.next;Current_Node!=NULL;Current_Node=Current_Node->next){my_Print(Current_Node);} } //結(jié)點(diǎn)個(gè)數(shù)size int _Size(Link_List *list){return list->size; } //釋放內(nèi)存 void _Free(Link_List *list){if(list!=NULL){free(list);list=NULL;} }

3 main.c

/* main.c linux鏈表實(shí)現(xiàn)思想就是:結(jié)點(diǎn)里面只創(chuàng)建一個(gè)next指針,用指針將各個(gè)結(jié)點(diǎn)相連接 打印和查找的時(shí)候,在進(jìn)行類型的轉(zhuǎn)換 */ #include "LinkList.h" #include <stdlib.h> #include <stdio.h> #include <string.h>typedef struct PERSON{Link_Node node;char name[64];int age; }Person;//打印回調(diào) void my_Print(Link_Node *data){Person *p=(Person *)data;//數(shù)據(jù)類型的轉(zhuǎn)換printf("name:%s age:%d\n",p->name,p->age); }//回調(diào)查找 int my_Find(Link_Node *data1,Link_Node *data2){//數(shù)據(jù)類型轉(zhuǎn)換Person *p1=(Person *)data1;Person *p2=(Person *)data2;if(strcmp(p1->name,p2->name)==0&&p1->age==p2->age){return 0;}else{return -1;}} int main(void){//初始化Link_List *list=_Init_();//實(shí)例產(chǎn)生數(shù)據(jù)Person p1,p2,p3,p4;strcpy(p1.name,"AAA");strcpy(p2.name,"BBB");strcpy(p3.name,"CCC");strcpy(p4.name,"DDD");p1.age=10;p2.age=20;p3.age=30;p4.age=40;//插入printf("********insert**********\n");_Insert(list,0,(Link_Node*)&p1);_Insert(list,1,(Link_Node*)&p2);_Insert(list,2,(Link_Node*)&p3);_Insert(list,3,(Link_Node*)&p4);//打印_Print(list,my_Print);//查找printf("********my_Find**********\n");int pos=_Find(list,(Link_Node*)&p2,my_Find);//int pos=_Find(list,&p2,my_Find);if(pos==-1){printf("p2 not found\n");}else{printf("p2 found pos=%d\n",pos);}//刪除printf("********delete**********\n");_Delete(list,2);_Print(list,my_Print);printf("Linked list size:%d\n",_Size(list)); //釋放內(nèi)存 _Free(list);return 0; }

三:結(jié)果顯示

1.編譯環(huán)境

centos 3.10.0-862.el7.x86_64 gcc version 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC)

2.編譯命令

gcc main.c LinkList.c -o a.out -std=c99 ./a.out

3.結(jié)果顯示

總結(jié)

以上是生活随笔為你收集整理的数据结构一:链表(linux链表)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。