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

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

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

单链表的初始化,整表创建,单个元素插入,单个元素删除,整表删除等操作...

發(fā)布時(shí)間:2023/12/20 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 单链表的初始化,整表创建,单个元素插入,单个元素删除,整表删除等操作... 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

????? 很早之前學(xué)的數(shù)據(jù)結(jié)構(gòu),放了很久后,以致對(duì)里面的一些操作都有些遺忘,故而再次溫習(xí)了一下數(shù)據(jù)結(jié)構(gòu),并整理了一點(diǎn)兒筆記,放在這里和大家分享,?我的代碼注釋的已經(jīng)很詳細(xì)了,對(duì)于容易出錯(cuò)的地方我也都有標(biāo)注,歡迎大家交流。

#include "stdafx.h" #include <stdio.h> #include <malloc.h> #include <stdlib.h> #include <time.h> #define OK 1 #define ERROR 0//#define typedef int Status;//函數(shù)返回的狀態(tài)值類型 typedef int ElemType; typedef struct Node {ElemType data;struct Node *next; } Node;//定義一個(gè)單鏈表存儲(chǔ)結(jié)構(gòu) typedef struct Node *LinkList;//定義一個(gè)線性表,定義的是Node結(jié)構(gòu)體的指針//創(chuàng)建一個(gè)具有n個(gè)元素的單鏈線性表,采用頭插法創(chuàng)建,注意:其中已經(jīng)包含了初始化操作 //初始化鏈表,函數(shù)調(diào)用完畢后,L會(huì)指向一個(gè)空的鏈表,即會(huì)改變指針的值,所以要用*L //*L表示結(jié)構(gòu)體指針的指針 Status List_Link_Create(LinkList *L,int n)//頭插法 {LinkList p;*L =(LinkList) malloc(sizeof(Node));//產(chǎn)生一個(gè)頭結(jié)點(diǎn),并使得*L指向這個(gè)頭結(jié)點(diǎn),于是*L便是一個(gè)頭指針,頭指針是鏈表的必要元素if (L == NULL)return ERROR;(*L)->next = NULL;//使得頭指針指向的內(nèi)容為空,建立一個(gè)帶頭結(jié)點(diǎn)的單鏈表printf("請(qǐng)輸出n個(gè)隨機(jī)生成的數(shù)字:");for (int i = 0; i < n; i++){p = (LinkList)malloc(sizeof(Node));//生成新節(jié)點(diǎn)p->data = rand() % 100 + 1;//隨機(jī)生成100以內(nèi)的數(shù)字printf("%d", p->data);printf(" ");//字符與字符之間空格 p->next = (*L)->next;(*L)->next = p;//插入到表頭 }printf("\n");//換行return OK; }Status List_Link_Length(LinkList L)//求出單鏈表的長(zhǎng)度 {int j = 0;LinkList p;p = L;while (p != NULL){p = p->next;j++;}printf("單鏈表當(dāng)前的長(zhǎng)度=%d",j);return j; } //Status List_Link_Ini(LinkList L)//初始化一個(gè)線性單鏈表 //{ // L = (LinkList)malloc(sizeof(Node));//產(chǎn)生一個(gè)頭結(jié)點(diǎn),并使得L指向這個(gè)頭結(jié)點(diǎn),于是L便是一個(gè)頭指針,頭指針是鏈表的必要元素 // if (L == NULL) // return ERROR; // L->next = NULL;//使得頭結(jié)點(diǎn)的指針域?yàn)榭?// return OK; //}//銷毀鏈表L,釋放鏈表L申請(qǐng)的內(nèi)存,使L的值重新變?yōu)镹ULL,所以會(huì)改變L的值,得用*L Status List_Link_Destory(LinkList *L) {LinkList p,q;p = (*L)->next;while (p){q = p->next;free(p);p = q;}(*L)->next = NULL;//頭節(jié)點(diǎn)的指針域?yàn)榭?/span>return OK; }Status List_Link_Insert(LinkList *L, int i, ElemType e)//在L中第i個(gè)元素之前插入新的數(shù)據(jù)元素e {int j;LinkList p, s;p = *L;j = 1;while (p&&j<i)//遍歷尋找第i個(gè)節(jié)點(diǎn) {p = p->next;++j;}if (!p || j > i)return ERROR;//第i個(gè)元素不存在s = (LinkList)malloc(sizeof(Node));//生成一個(gè)新節(jié)點(diǎn)s->data = e;s->next = p->next;//將p的后繼節(jié)點(diǎn)賦值給s的后繼p->next = s;printf("插入節(jié)點(diǎn)的元素的值為:%d\n", e);return OK;//插入成功 }//刪除L的第i個(gè)數(shù)據(jù)元素,并用e返回其值 //注意這里是*e,而不是e,區(qū)別于插入當(dāng)中的變量e Status List_Link_Delete(LinkList *L, int i, ElemType *e) {int j=1;LinkList p, q;p = *L;while (p->next&&j<i)//遍歷尋找第i個(gè)元素 {p = p->next;++j;}if (!(p->next) || j > i)return ERROR;//第i個(gè)元素不存在 q = p->next;//q表示即將被刪除元素的節(jié)點(diǎn)*e = q->data;p->next = q->next;//將q 后繼賦值給p的后繼free(q);//q被利用完畢后,將q釋放printf("刪除第%d個(gè)節(jié)點(diǎn)的元素值為:%d\n", i, *e);return OK;}Status List_Link_GetElem(LinkList L, int i, ElemType *e)//取出單鏈表L中的第i個(gè)元素,并通過(guò)*e返回 {int j;LinkList p;p = L->next;//找到單鏈表L中第一個(gè)節(jié)點(diǎn)j = 1;while (p&&j < i){p = p->next;++j;}if (!p || j > i)return ERROR;//第i個(gè)元素不存在*e = p->data;//取出第i個(gè)元素的數(shù)據(jù)域并傳值給*eprintf("被取出的元素的值為:");printf("%d\n", *e);return OK; } int main()//測(cè)試函數(shù) {LinkList L1;ElemType f,h;List_Link_Create(&L1, 6);List_Link_GetElem(L1, 3, &f);List_Link_Insert(&L1, 3, 15);//在鏈表的第3個(gè)節(jié)點(diǎn)之前插入元素15List_Link_Delete(&L1, 3, &h);//刪除鏈表的第3個(gè)節(jié)點(diǎn)的元素,并返回給h輸出return OK; }/*1.對(duì)于LinkList L : L是指向定義的node結(jié)構(gòu)體的指針, 可以用->運(yùn)算符來(lái)訪問(wèn)結(jié)構(gòu)體成員, 即L->elem, 而(*L)就是個(gè)Node型的結(jié)構(gòu)體了, 可以用點(diǎn)運(yùn)算符訪問(wèn)該結(jié)構(gòu)體成員, 即(*L).elem;2.對(duì)于LinkList *L:L是指向定義的Node結(jié)構(gòu)體指針的指針, 所以(*L)是指向Node結(jié)構(gòu)體的指針, 可以用->運(yùn)算符來(lái)訪問(wèn)結(jié)構(gòu)體成員, 即(*L)->elem, 當(dāng)然, (**L)就是Node型結(jié)構(gòu)體了, 所以可以用點(diǎn)運(yùn)算符來(lái)訪問(wèn)結(jié)構(gòu)體成員, 即(**L).elem;3.在鏈表操作中, 我們常常要用鏈表變量作物函數(shù)的參數(shù), 這時(shí), 用LinkList L還是LinkList *L就很值得考慮深究了, 一個(gè)用不好, 函數(shù)就會(huì)出現(xiàn)邏輯錯(cuò)誤, 其準(zhǔn)則是:如果函數(shù)會(huì)改變指針L的值, 而你希望函數(shù)結(jié)束調(diào)用后保存L的值, 那你就要用LinkList *L, 這樣, 向函數(shù)傳遞的就是指針的地址, 結(jié)束調(diào)用后, 自然就可以去改變指針的值;而如果函數(shù)只會(huì)修改指針?biāo)赶虻膬?nèi)容, 而不會(huì)更改指針的值, 那么用LinkList L就行了;*/


下面是我在vs2013中的測(cè)試結(jié)果:

請(qǐng)輸出n個(gè)隨機(jī)生成的數(shù)字:42 68 35 1 70 25
被取出的元素的值為:1
插入節(jié)點(diǎn)的元素的值為:15
刪除第3個(gè)節(jié)點(diǎn)的元素值為:15
請(qǐng)按任意鍵繼續(xù). . .

轉(zhuǎn)載于:https://www.cnblogs.com/huster666/p/5642638.html

總結(jié)

以上是生活随笔為你收集整理的单链表的初始化,整表创建,单个元素插入,单个元素删除,整表删除等操作...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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