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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据结构一:链表(单向链表)

發布時間:2025/3/12 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构一:链表(单向链表) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一:需求分析

不連續內存空間,單向鏈表,有頭結點,插入,刪除,查找,獲得鏈表長度,返回第一個結點,回調打印,釋放內存

二:代碼

LinkList.h

#ifndef _LINKLIST_H_ #define _LINKLIST_H_//定義結點 typedef struct LINKNODE{//結點有數據和指針void *data;//任何類型的數據都可以接收struct LINKNODE *next; }Link_Node;//定義鏈表 typedef struct LINKLIST{//有大小和頭結點Link_Node *head;//頭結點不保存數據int size; }Link_List; //打印顯示的回調函數 typedef void (*PRINT)(void*data); //初始化 Link_List *_Init_List(); //在指定位置中插入結點 void Inset_List(Link_List *list,int pos,void *data); //刪除根據指定位置 void Delete_List(Link_List *list,int pos); //打印,我們不知道數據類型,用回調函數 void Print_List(Link_List *list,PRINT myPrint); //返回第一個結點 void *Front_List(Link_List *list); //根據值查找 int Find_List(Link_List *list,void *); // 獲得鏈表長度 int Size_List(Link_List *list); //釋放內存 void Free_List(Link_List *list);#endif

LinkList.c

#include "LinkList.h" #include <stdio.h> #include <stdlib.h>//初始化 Link_List *_Init_List(){//開辟鏈表空間//Link_Node *node=(Link_Node*)malloc(sizeof(Link_Node)); Link_List *list=(Link_List*)malloc(sizeof(Link_List));list->size=0;//頭結點不保存數據 list->head=(Link_Node*)malloc(sizeof(Link_Node));list->head->data=NULL;list->head->next=NULL;return list; } //在指定位置中插入結點 void Inset_List(Link_List *list,int pos,void *data){if(list==NULL){return ;}//pos位置如果不對,默認插最后if(pos<0||pos>list->size){pos=list->size;} //1.創建新結點Link_Node *New_Node=(Link_Node*)malloc(sizeof(Link_Node));New_Node->data=data;New_Node->next=NULL;//2.遍歷查找插入位置的前一個位置Link_Node *Current_Node=list->head;for(int i=0;i<pos;i++){Current_Node=Current_Node->next;} //3.插入New_Node->next= Current_Node->next;Current_Node->next=New_Node;//4.數量加一list->size++; } //刪除根據指定位置 void Delete_List(Link_List *list,int pos){if(list==NULL||pos<0||pos>list->size){return;}//循環遍歷Link_Node *Current_Node=list->head;for(int i=0;i<pos;i++){//找到刪除結點的前一個結點 Current_Node=Current_Node->next; }Link_Node *Delete_Node=Current_Node->next;//需要刪除的結點Current_Node->next=Delete_Node->next;free(Delete_Node);list->size--;} //打印,我們不知道數據類型,用回調函數 void Print_List(Link_List *list,PRINT myPrint){//循環遍歷Link_Node *Current_Node=list->head->next;while(Current_Node!=NULL){myPrint(Current_Node->data);Current_Node=Current_Node->next;} } //返回第一個結點 void *Front_List(Link_List *list){return list->head->next->data; } //查找 int Find_List(Link_List *list,void *data){if(list==NULL){return -1;}Link_Node *Current_Node=NULL;int i=0;for(Current_Node=list->head->next;Current_Node!=NULL;Current_Node++,i++){if(Current_Node->data==data){break;}}return i; } // 獲得鏈表長度 int Size_List(Link_List *list){if(list==NULL){return -1;}return list->size; } //釋放內存 void Free_List(Link_List *list){if(list==NULL){return ;}//先釋放結點內存Link_Node *Current_Node=list->head->next;while(Current_Node!=NULL){Link_Node *Next_Node=Current_Node->next;//緩存下一個結點 free(Current_Node);Current_Node=Next_Node;}Current_Node=NULL;//再釋放鏈表內存 list->size=0;free(list);list=NULL; }

oneWay_List.c

#include "LinkList.h" #include <stdio.h> #include <stdlib.h>//創建數據 typedef struct PERSON{char name[24];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(void){Person p1={"AAA",18,80};Person p2={"BBB",19,90};Person p3={"CCC",20,100};Person p4={"CCC",30,150};//初始化Link_List *list=_Init_List();printf("******insert*******\n");Inset_List(list,0,&p1);Inset_List(list,1,&p2);Inset_List(list,2,&p3);Inset_List(list,3,&p4);//打印,我們不知道數據類型,用回調函數 Print_List(list,myPrint);// 獲得鏈表長度printf("List length:%d\n",Size_List(list));//返回第一個結點printf("*******First node*******\n");Person *p=(Person *)Front_List(list);printf("First node name:%s age:%d score:%d\n",p->name,p->age,p->score);//查找 printf("*******find*******\n");int ret=Find_List(list,&p2);if(ret){printf("Found p2 at:%d\n",ret);}else{printf("could not find it.\n");}printf("*******delete*******\n");//刪除根據指定位置Delete_List(list,2);Print_List(list,myPrint);// 獲得鏈表長度printf("List length:%d\n",Size_List(list));//釋放內存 Free_List(list);//system("pause");return 0; }

三:結果顯示

1.編譯環境

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

2.編譯命令

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

總結

以上是生活随笔為你收集整理的数据结构一:链表(单向链表)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 天天爽夜夜爽人人爽 | 日韩精品视频一区二区三区 | 欧美九九 | 国产成人免费av | 欧美视频一二三区 | 日韩专区在线 | 久久久久99精品国产片 | 99操 | 免费在线观看黄网站 | 国产精品免费一区二区三区在线观看 | 国产一二三区免费视频 | 韩国毛片基地 | 成了校长的性脔h文 | 精品无码人妻一区二区三 | 国产欧美在线播放 | 手机看片福利一区 | h视频在线观看网站 | 朴银狐电影中文在线看 | 无码一区二区波多野结衣播放搜索 | 国产伦精品一区二区三区视频我 | 日本大乳奶做爰 | 上原亚衣在线 | 都市激情中文字幕 | 一级视频片 | 日韩高清毛片 | 欧美aaaaaaaaaa| a视频在线免费观看 | 日本成人小视频 | 富二代成人短视频 | 中文字幕乱码人妻无码久久 | 狠狠干狠狠操视频 | aa视频网站 | 久久94| 免费极品av一视觉盛宴 | 亚洲精品自拍视频 | 国产一区二区三区成人 | a在线看 | 日韩激情第一页 | 五月婷婷综 | 久热超碰| www.欧美com| 亚洲同性gay激情无套 | 久久国产经典视频 | 亚洲精品一区 | 国产精品yy | 国产精品69久久久久 | 性歌舞团一区二区三区视频 | 幸福宝在线观看 | 久久久久中文字幕亚洲精品 | 日本熟妇乱子伦xxxx | 天堂8av| 高清在线一区二区三区 | 欧美嫩交 | 在线观看视频一区二区 | 成年人视频网站 | 久久综合久 | 在线观看免费视频一区 | 在线免费av播放 | 国产夫妻在线观看 | 我的丝袜美腿尤物麻麻 | 精品婷婷色一区二区三区蜜桃 | av九九九 | 久久久无码精品亚洲无少妇 | 亚洲欧美乱综合图片区小说区 | 91亚瑟视频 | 69国产 | 高清一二三区 | 一本到在线 | 精品一区二区免费看 | 欧美午夜一区 | 精品天堂 | 日本丰满少妇做爰爽爽 | 日韩成人无码影院 | 国产精品xxxxxx | youjizz亚洲 | 久久激情网站 | 北京富婆泄欲对白 | 欧洲精品久久 | 韩日免费av | 精品一区二区三区中文字幕 | 一个人免费在线观看视频 | 日韩激情网站 | 日韩r级在线观看 | 欧美日韩精品在线播放 | 91看片网站 | 久久黄色小视频 | 97av在线视频 | 日本性久久 | 动漫一区二区三区 | 亚洲精品永久免费 | 可以免费看毛片的网站 | 日韩国产成人无码av毛片 | 蜜臀视频一区二区三区 | 美女网站免费 | 91久久国产精品 | 精品一区二区三区免费毛片 | 美女精品一区 | 成人福利片 | 奇米狠狠干 |