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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

线性表之链式存储结构_单链表相关算法

發布時間:2025/3/15 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 线性表之链式存储结构_单链表相关算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在存儲結構上,不需要連續的存儲空間,需要上一個結點的指針域 指向下一個結點即可,找到一個結點就可以找到下一個結點。

學習教材是大話數據結構,加上自己的一些個人理解。這個算法 有點繞,需要對指針 相關內容相當熟悉。通過學習感覺單鏈表相關算法還是蠻考驗C知識的和邏輯思維。

下面看代碼:


#include <stdio.h> #include <stdlib.h> #define ERROR 0 #define OK 1 typedef int EleType; typedef int Status; typedef struct Node Node;//鏈表元素 struct Node {EleType data;//數據域Node * next;//指針域 }; typedef Node* LinkList; void printLinkList(const LinkList * const list) {if (NULL ==list) {//鏈表為空printf("printLinkList error \n");return;}int i = 1;LinkList li = (*list)->next;//從頭結點后面第一個結點開始遍歷while (li)//最后一個元素沒有指向,不會進行循環。{printf("第%d元素:%d\t", i, li->data);li = li->next;i++;}printf("\n");return; } //創建擁有頭結點的鏈表 //頭插法創建鏈表,往鏈表中添加元素,新創建的的元素始終在頭結點后面類似 頭指針 -> 頭結點->An->An-1->An-2 ...-> A1 //元素的數據 隨機生成100以內的數字 Status creatLinkListInHead(LinkList *list,int n) {srand(time(0));//設置隨機種子,為產生隨機數做準備。//LinkList 類型 和 Node * 類型是一樣的!看最上方定義類型別名,為什么可以做呢?鏈表的頭指針 就是指向結點Node,所有鏈表類型是 Node *,只是為了更好看而已。 LinkList li=NULL;Node *node=NULL;//可以定義為 LinkList *node = NULL;int i = 0;li = (LinkList)malloc(sizeof(Node));//頭指針指向頭結點,給頭結點分配空間if (NULL == li||n<0) {//分配內存空間失敗或者鏈表元素個數非法 返回return ERROR;}li->next = NULL;//初始頭結點沒有指向for ( i = 0; i < n; i++){node = (Node*)malloc(sizeof(Node));//給結點分配空間if (NULL==node) {//給分配空間失敗 return ERROR;}node->data = rand()%100;//除以100取余的到100以內的數字,不包括100,如果含100 就需要+1node->next = li->next;//新添加的元素指針域 指向頭結點后面的結點li->next = node;//頭結點指針域 指向新增加的元素}*list = li;//通過指針 給外部鏈表賦值return OK; } //尾插法創建鏈表,往鏈表中添加元素,先添加的元素放前面,后添加的元素放后面,遵循先來后到的道理 Status creatLinkListInTail(LinkList *list, int n) {srand(time(0));//設置隨機種子LinkList li = NULL ;Node *node = NULL;int i = 0;li = (LinkList)malloc(sizeof(Node));if (NULL == li || n<0) {//分配內存空間失敗或元素個數非法return ERROR;}li->next = NULL;//初始頭結點指向*list = li;//給通過外部鏈表賦值,指向頭結點,此時 list 和 li 都指向頭結點。for ( i = 0; i < n; i++){node = (Node*)malloc(sizeof(Node));//給結點分配空間if (NULL == node) {//分配空間失敗 return ERROR;}node->data = rand() % 100;//除以100取余的到100以內的數字,不包括100,如果含100 就需要+1li->next = node;//新結點 放到鏈表末尾li = node;//移動鏈表指針指向最新鏈表最后一個元素,為了下次循環在鏈表末尾添加元素//temp = node;}//最后表尾元素指針域 設置NULLli->next = NULL;//*list = li;//一定要放在for循環前面,不然頭結點的內存空間沒有指向!起初l指向頭結點,但是進入for循環后l的指向發生改變要移動指向最新添加的結點元素。return OK; } //獲取鏈表元素數據,通過指針返回 鏈表第i個元素的 數據 //i還是按國人的順序來吧,從1開始 Status getELement(LinkList list, int position,EleType *e) {//異常情況:空指針,元素位置非法if (NULL == list || position < 1) {return ERROR;}LinkList li = list;int i = 1;while (li && i<position) {//在鏈表范圍內遍歷元素 直到 找到第position位置的 元素 i++;li = li->next;}if (NULL == li || position > i) {//超出鏈表范圍,都遍歷完鏈表還沒找到元素。return ERROR;}//通上面 while循環 當i = position 跳出循環 ,li 此時指向鏈表 第position位置的 前面一個結點。*e = li->next->data;return OK; } //往鏈表中第position位置 插入元素,元素數據為 e //元素位置從1開始數 Status insertLinkList(LinkList *list,int position,EleType e) {Node *node = (Node*)malloc(sizeof(Node));//異常情況:空指針,為插入元素分配空間失敗,元素位置非法,if (NULL == list || NULL==node || position < 1) {return ERROR;}LinkList li = * list;int i = 1;while ( li && i<position) {//在鏈表范圍內遍歷元素 直到 找到第position位置的 元素 i++;li = li->next;}if (NULL == li || position > i) {//超出鏈表范圍return ERROR;}//通上面 while循環 當i = position 跳出循環 ,li 此時指向鏈表 第position位置的 前面一個結點。node->data = e;node->next = li->next;//讓 插入結點指針域指向 原來位置的結點li->next = node;//讓插入結點位置前的結點 指向插入結點return OK; } //在鏈表第position位置 刪除元素,通過指針返回 刪除元素的數據內容 Status delLinkListEle(LinkList *list, int position, EleType *e) {//異常情況:空指針,元素位置非法if (NULL == list || position < 1) {return ERROR;}LinkList li = *list;Node * node = NULL;int i = 1;while (li && i<position) {//在鏈表范圍內遍歷元素 直到 找到第position位置的 元素 i++;li = li->next;}if (NULL == li || position > i) {//超出鏈表范圍,都遍歷完鏈表還沒找到元素。return ERROR;}//通上面 while循環 當i = position 跳出循環 ,li 此時指向鏈表 第position位置的 前面一個結點。node = li->next;//保存要刪除元素的地址li->next = node->next;//讓刪除元素前置結點 指向 刪除元素 直接后繼結點。然后就可以釋放 刪除結點的空間了。*e = node->data;//將刪除元素數據通過指針修改返回free(node);//釋放刪除元素空間return OK; } //清空整個鏈表,釋放指針指向的內存 Status freeLinkList(LinkList *list) {if (NULL == list)//空指針return ERROR;//注意:頭結點不要釋放!只釋放頭結點后面的結點元素//LinkList li = *list;這樣將會把頭結點也釋放掉LinkList li = (*list)->next;//將鏈表指針指向第一個結點元素,從這個元素開始釋放Node * node = NULL;//臨時變量,指向還未釋放的元素while (li){//鏈表指針向移動指向結點元素,直到沒有后繼結點node = li->next;//保存要釋放結點 的直接后繼結點位置。 free(li);li = node;//繼續指向 未釋放結點}//將頭結點指針域設置為NULL(*list)->next = NULL;return OK; } int main(void) {LinkList linkList;EleType e;printf("頭插法創建鏈表結構:\n");creatLinkListInHead(&linkList, 4);printLinkList(&linkList);//先釋放 然后再用尾插法freeLinkList(&linkList);printf("尾插法創建鏈表結構:\n");creatLinkListInTail(&linkList, 4);printLinkList(&linkList);printf("第%d個位置插入%d:\n",5,100);//插入元素insertLinkList(&linkList, 5, 100);//往鏈表尾結點后面插入元素printLinkList(&linkList);printf("第%d個位置插入%d:\n", 3, 103);//插入元素insertLinkList(&linkList, 3, 103);//鏈表中間插入元素printLinkList(&linkList);//獲取元素getELement(linkList, 4, &e);printf("第%d個位置元素:%d\n", 4,e);//刪除元素delLinkListEle(&linkList, 5, &e);printf("第%d個位置刪除:%d\n", 5, e);printLinkList(&linkList);//刪除元素delLinkListEle(&linkList, 1, &e);printf("第%d個位置刪除:%d\n", 1,e);printLinkList(&linkList);//釋放整個表freeLinkList(&linkList);system("pause");return 0; }
結果驗證截圖:


總結

以上是生活随笔為你收集整理的线性表之链式存储结构_单链表相关算法的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 国产精品搬运 | 日韩激情| h视频在线免费观看 | 高潮流白浆在线观看 | 色播视频在线播放 | 久久超碰精品 | 日韩一级av毛片 | 欧美极品在线视频 | 国产亚洲一区二区三区在线观看 | 色婷婷在线视频 | 国产精品社区 | 人妻 校园 激情 另类 | 欧美zzz物交 | 久久调教视频 | 国产视频精品一区二区三区 | 久久久xxx| 能看av的网址| 精品一区二区三区免费看 | 色婷婷av一区二区三区在线观看 | 中文视频在线 | 加勒比毛片| 成人国产免费 | 日日爱夜夜操 | 亚瑟av在线| 亚洲av人人澡人人爽人人夜夜 | 91丝袜视频 | 翔田千里一区二区三区av | 五月婷婷狠狠 | 娇妻被老王脔到高潮失禁视频 | 国产在线拍揄自揄拍无码 | 69精品无码成人久久久久久 | 日本午夜在线视频 | 激情av综合| 亚洲永久网站 | 亚洲春色在线 | 99精品人妻国产毛片 | 日韩精品一区二区三区四区 | 日韩一区二区三区四区在线 | 亚洲a精品 | 亚洲情网| 日韩精品一区三区 | 日本精品人妻无码免费大全 | av激情影院 | 伊人av网站 | 波多野42部无码喷潮在线 | 日本高清中文字幕 | 逼逼爱插插网站 | 香蕉久久夜色精品国产使用方法 | a国产免费| 欧美一区二区三区成人 | 亚洲视频欧洲视频 | 超碰狠狠| 经典杯子蛋糕日剧在线观看免费 | 欧美一区二区三区视频在线 | 伦理片久久| 欧美性猛交xxxx乱大交hd | 91欧美国产 | 精品久久久久久无码国产 | 亚洲免费a | 欧美在线专区 | 古装三级吃奶做爰 | av福利在线| 国产一区二区三区免费 | 男生插女生网站 | 国产精品 日韩 | 亚洲最大看欧美片网站 | 国产精品一二区 | 免费午夜激情 | 亚洲视频 一区 | 特级淫片裸体免费看冫 | 国产精品成人免费一区二区视频 | chinese精品自拍hd | 成人少妇影院yyyy | 日本三级韩国三级三级a级按摩 | 超碰视屏 | 国产麻豆天美果冻无码视频 | 国产精品操 | 日韩少妇视频 | 色播视频在线观看 | 99久久99久久精品国产片桃花 | 日本欧美视频 | 91精品国产色综合久久不8 | 久草热在线 | 日日躁夜夜躁aaaabbbb | 一级黄色a视频 | 很黄很污的视频网站 | 日本熟妇色xxxxx日本免费看 | 97精品人妻一区二区三区 | 青青操免费 | 国产99在线 | 亚洲 | 成人小视频在线免费观看 | 日韩精品福利在线 | 午夜影院在线视频 | 欧美婷婷精品激情 | 欧美精品videos极品 | 什么网站可以看毛片 | 在线观看的免费 | 污污网站免费在线观看 | 一出一进一爽一粗一大视频 |