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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

线性表--链式实现方式

發(fā)布時間:2025/3/15 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 线性表--链式实现方式 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

????????? ? ? ? ?? 清明節(jié)感冒了,休息了幾天。前面實現(xiàn)了順序方式的線性表,這篇文章筆者會簡單的實現(xiàn)

? ? ? ?? 鏈式方式的線性表。

??????? ? ? ? ????? 在實現(xiàn)之前首先需要對其線性表的鏈式方式的特點做一個了解:

? ? ? ?? ?? 通俗的講鏈式線性表就是元素之間邏輯相鄰但是物理位置不一定相鄰,那么既然物理位置不相鄰

??????????? 又是如何來體現(xiàn)其邏輯位置的呢?其邏輯關系是上一個元素來維護的。鏈式線性表的每個元素是

??????????? 保存在結點中的,結點就是一塊內(nèi)存區(qū)域。它包含兩個區(qū)域數(shù)據(jù)域指針域。數(shù)據(jù)域保存元素值

??????????? 指針域保存下一個結點指向性。

???????????????? 具體如何呢?看看結點數(shù)據(jù)結構吧:

typedef struct LNode { ElemType data;//節(jié)點數(shù)據(jù)信息域 struct LNode * next;//指向下一個節(jié)點的指針 }LNode ,*LinkList; ?????????????? 之后我們來看看其具體的實現(xiàn)和操作,在對鏈式線性表做一個總結

/** Author Kiritor 線性表的鏈式實現(xiàn)*/ #include "stdafx.h" #include<stdio.h> #include<stdlib.h> #include<conio.h> #include<malloc.h> #define OK 1 #define OVERFLOW -1 #define ERROR -1 #define TRUE 1 #define FALSE 0 #define ElemType int //線性表的單鏈表存儲結構 typedef struct LNode { ElemType data;//節(jié)點數(shù)據(jù)信息域 struct LNode * next;//指向下一個節(jié)點的指針 }LNode ,*LinkList; //初始化單鏈表 int init_List(LinkList &l) { printf("初始化線性表\n"); //產(chǎn)生一個頭結點,并且使L指向頭結點 l = (LinkList)malloc(sizeof(LNode)); if(!l) exit(OVERFLOW);//分配空間失敗 l->next=NULL;//頭結點的指針域為空表示無元素 l->data= 0;//頭結點數(shù)據(jù)域用于表示鏈表的長度 return OK; } //銷毀鏈式單向線性表 void destory_List(LinkList &l) { printf("銷毀線性表"); LinkList q ; /*循環(huán)的釋放每一個結點的內(nèi)存空間*/ while(l) { q=l->next; free(l); l=q; } } //將線性表重新置為空表,并非銷毀 int clear_List(LinkList &l) { printf("清空線性表,并非銷毀\n"); LinkList p,q; p=l->next;//p指向第一個結點 while(p) { q= p->next; free(p); p=q; } //之后將頭指針域的指向性設置為空 l->next = NULL; l->data=0; return OK; } //線性表插入(帶頭結點的) //在第i個位置之前插入e,i值從1開始 int insert_List(LinkList &l,int i,ElemType e) { printf("在第%d個位置插入%d\n",i,e); //首先尋找第i個結點 LinkList q = l,s; int j=0;//用于循環(huán)的計數(shù)器 while(q&&j<i-1) { q = q->next; j++; } if(!q||j>i-1) { return ERROR; } s=(LinkList)malloc(sizeof(LNode));//生成一個新的結點 s->data=e; s->next=q->next; q->next =s; l->data++;//線性表的長度加1 return OK; } /*取得線性表的i位置的元素,存在返回ok,并將之存在e中 反之返回ERROR,需要注意的是l是帶頭結點的單鏈表 */ int getElem(LinkList l,int i,ElemType &e) { LNode * p = l->next ; int count = 1; //初始化,使p指向第一個結點,count為計數(shù)器 while(p&&count < i) { p = p ->next ; count++; } //p指針移動到要取得的元素位置的結點處 if(!p||count >i) return ERROR; e=p->data; return e; } /*判斷線性表是否為空*/ int isEmpty(LinkList &l) { if(l->data==0) return FALSE; else return TRUE; } /*刪除線性表中的某個位置元素 i是從1開始的**/ int delete_LinkList(LinkList &l,int i) { printf("刪除線性表%d位置的元素\n",i); int j=0; LinkList p = l; //首先找到要刪除的元素的位置 while (p->next&&i>=1&&j<i-1) { p=p->next; j++; } if(!p->next||j>i-1) return ERROR;//刪除的位置不合理 LinkList q = p->next; p->next = q->next; free(q); l->data--; return OK; } int _tmain(int argc, _TCHAR* argv[]) { LinkList l; int e; init_List(l); insert_List(l,1,3); insert_List(l,1,4); insert_List(l,1,5); insert_List(l,1,6); printf("第一個位置的元素為%d\n",getElem(l,1,e)); printf("線性表的元素個數(shù);%d\n",l->data); clear_List(l); destory_List(l); _getch(); return 0; } ????????????? 看看程序的執(zhí)行結果:

??????????????

???????? 上述執(zhí)行最重要的還是插入和刪除的操作!

??????????? 插入操作過程:

?????????????

????????????????? 刪除操作過程:

?? ? ? ? ?? ??

????????? ? ? ? ? 通過代碼的閱讀就可以看出,鏈式方式的線性表和順序方式的線性表的主要區(qū)別

???? ? ? ? ?? 在于物理地址上的不連續(xù),而且順序方式對于插入刪除元素開銷比鏈式方式大,但是

?? ? ? ? ?? ? 順序方式取得元素的時候更加方便。因此選取那種線性表的時候需要根據(jù)實際情況來定!


轉載于:https://blog.51cto.com/kiritor/1226737

總結

以上是生活随笔為你收集整理的线性表--链式实现方式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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