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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

2.3单链表的基本使用及其cpp示例

發(fā)布時(shí)間:2025/3/8 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2.3单链表的基本使用及其cpp示例 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

2.3線性表的鏈?zhǔn)奖憩F(xiàn)與實(shí)現(xiàn)

2.3.1.1單鏈表
【特點(diǎn):
*用一組任意的存儲(chǔ)單元存儲(chǔ)線性表的數(shù)據(jù)元素
*利用指針實(shí)現(xiàn)用不同相鄰的存儲(chǔ)單元存放邏輯上相鄰的元素
*每個(gè)元素ai,除存儲(chǔ)本身信息外,還存儲(chǔ)其直接后繼的元素(后一個(gè)元素的地址)
*結(jié)點(diǎn):數(shù)據(jù)元素ai的存儲(chǔ)映像
{數(shù)據(jù)域:數(shù)據(jù)元素本身
指針域:指示直接后繼的存儲(chǔ)位置

【頭指針、頭結(jié)點(diǎn)、第一個(gè)元素結(jié)點(diǎn)
*頭指針:以線性表的第一個(gè)數(shù)據(jù)元素a1的存數(shù)地址作為線性表的地址,稱為線性表的頭指針

*頭結(jié)點(diǎn):為了操作方便,在第一個(gè)結(jié)點(diǎn)前虛加一個(gè)“頭結(jié)點(diǎn)”,指向頭結(jié)點(diǎn)的指針為鏈表的頭指針(相當(dāng)于第一個(gè)呀元素的結(jié)點(diǎn))

代碼:

typedef struct LNode{ElemType data;struct LNode*next; }LNode,*LinkList //LNode是結(jié)構(gòu)體的別名,LinkList為指針變量 //相當(dāng)于:typedef LNode *LinkList

2.3.1.2 單鏈表存儲(chǔ)結(jié)構(gòu)實(shí)現(xiàn)

格式: data | next

【p指向數(shù)據(jù)域
(*p).data=10;
或:p->data=10; //表示p指向結(jié)點(diǎn)的數(shù)據(jù)域

(*p).next=10
或 p->next //表示p指向結(jié)點(diǎn)的指針域

*生成一個(gè)LNode型新結(jié)點(diǎn):
p=(LinkList)malloc(sizeof(LNode));

*系統(tǒng)回收p的結(jié)點(diǎn)
free(p)

*單鏈表特點(diǎn):
1)是它是一種動(dòng)態(tài)結(jié)構(gòu),整個(gè)存儲(chǔ)空間為多個(gè)鏈表共用
2)不需預(yù)先分配空間
3)指針占用額外存儲(chǔ)空間
4)不能隨機(jī)存取,查找速度慢

【基本操作:
1)GetElem(L,i,&e) //第i個(gè)元素用e帶回結(jié)果
2)ListInsert(&L,i,e) //插入
3)ListDelete(&L,i,e) //刪除
4)CreateList_L(&L,n) //創(chuàng)建線性表

2.3.1.3單鏈表的查找

【操作:
1)GetElem(L,i,&e)

【基本思想:
1)令p為指針變量,首先指向第一個(gè)結(jié)點(diǎn),變量 j為計(jì)數(shù)器
2)依次向后查找,循環(huán)結(jié)束條件:p為空或j>=i;
3)找到用e返回第i個(gè)值

【代碼:

Status GetElem_L(LinkList L,int i,ElemType&e) { //L是鏈表的頭指針(對(duì)帶頭結(jié)點(diǎn)的鏈表),以e返回dii個(gè)值 p=L->next; j=1;while (p&&j<i) {p=p->next; ++j;if(!p||j>i)return ERROR;e=p->data; //取第i個(gè)值 return OK; }

2.3.1.4單鏈表的插入操作

2)ListInsert(&L,i,e)
在線性表第i個(gè)元素之前插入一個(gè)元素e

【思路:在第i項(xiàng)的前加一個(gè)接結(jié)點(diǎn),i-1項(xiàng)的地址域和e的數(shù)據(jù)域連接

int ListInsert_L(LinkList&L,int i,int e) { LNode*p,*s;int j; //或:LinkList p,s; 等同 p=L;j=0; //計(jì)數(shù)器 while(p&&j<i-1) {p=p->next;++j;} if(!p||j>i-1) return ERROR; s=LinkList()malloc(sizeof(LNode)); //新結(jié)點(diǎn) s->data=e; s->next=p->next; p->next=s; return OK; }

2.3.1.5 單鏈表的刪除

【思路:刪除第i個(gè)元素,并保存到元素e中

【代碼:

int ListDelete_L(LinkList&L,int i,ElemType&e) { LNode*p,*q;int j; p=L;j=0; while(p->next||j<i-1) //????我覺得應(yīng)該是(!p||j>i-1) {p=p->next;++j} if(p->next==NULL||j>i-1) return ERROR; //刪除位置不合理 q=p->next; //q指向被刪除結(jié)點(diǎn) p->next=q->next; // e=q->data; //取出第i個(gè)結(jié)點(diǎn)的數(shù)據(jù)域 free(q); // 釋放dii個(gè)結(jié)點(diǎn)的內(nèi)存 return OK; }

2.3.1.6單鏈表的建立

【頭插法建立有頭結(jié)點(diǎn)的單鏈表

【圖】
L=(Linklist)malloc(sizeof(LNode)) //sizeof后面跟數(shù)據(jù)類型(LNode)
L->next=NULL

【圖】
p=(LinkList)malloc(sizeof(LNode))
scanf("%f",&(p->data)); //

【整個(gè)代碼:

void CreateList_L(LinkList &L,int n) { LNode*p;int i; L=(LinkList)malloc(sizeof(Lnode)); L->next=NULL; for(i=n;i>0;--i) { p=(Listlink)malloc(sizeof(LNode)); scanf("%d",&p->data); p->next=L->next; l->next=p //這里的=都可以理解為“給了,到,指向” } }

2.3.1.7有序單鏈表的合并

例:線性表LA和LB中數(shù)據(jù)元素按照廢帝劍有序排列,將LA和LB合并為一個(gè)新的LC,且LC中的數(shù)據(jù)元素仍按照遞減有序排列


【代碼:

void MergeList_L(LinkList&La,LinkList&Lb,LinkList&Lc) {// 歸并La和Lb得到Lc,Lc也按照降序排列 LinkList pa,pb,pc; pa=La->next;pb=Lb->next; Lc=pc=La; //用La的頭結(jié)點(diǎn)作為Lc的頭結(jié)點(diǎn) while(pa&&pb) { if(pa->data<=pb->data) { pc->next=pa; pc=pa;pa=pa->next; } else { pc->next=pb;pc=pb;pb=pb->next; } pc->next=pa?pa:pb; //若a不為空則指向pa,否則指向pb free(Lb); }

2.3.1.8靜態(tài)鏈表

定義:用數(shù)組描述的鏈表叫靜態(tài)鏈表

目的:為在不設(shè)指針類型的高級(jí)程序語言中使用鏈表結(jié)構(gòu)

存儲(chǔ)結(jié)構(gòu):

#define MAXSIZE 100 //靜態(tài)鏈表最大長度 typedef struct{ ElemType data; int cur; //游標(biāo),代替指針的結(jié)點(diǎn),表示數(shù)組中的位置 }component,SLinkList[MAXSIZE]

2.3.2循環(huán)鏈表

循環(huán)鏈表是單鏈表的變形

循環(huán)鏈表最后一個(gè)結(jié)點(diǎn)link指針部位NULL,而是指向表的前端

為簡(jiǎn)化操作,在循環(huán)鏈表往往插入頭結(jié)點(diǎn)

特點(diǎn):
只要知道表中一結(jié)點(diǎn)的地址,就可以搜索到所有其他結(jié)點(diǎn)的地址

操作的時(shí)間復(fù)雜度:
表尾插入,時(shí)間復(fù)雜度:O(1)
表尾刪除:O(n)
表頭插入,同表尾
表頭刪除:O(1)

總結(jié)

以上是生活随笔為你收集整理的2.3单链表的基本使用及其cpp示例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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