




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第C++詳解如何實(shí)現(xiàn)單鏈表目錄單鏈表單鏈表的基本操作1.初始化2.取值3.查找4.插入5.刪除示例代碼開發(fā)環(huán)境運(yùn)行結(jié)果
單鏈表
鏈表內(nèi)存空間不一定連續(xù),其擴(kuò)展性較好。多余的不多說了。該文主要記錄單鏈表的實(shí)現(xiàn),該單鏈表含有一個(gè)非空的頭節(jié)點(diǎn)。鏈表的操作實(shí)際上是對(duì)其指針域與數(shù)據(jù)域的操作。
線性表的鏈?zhǔn)酱鎯?chǔ)又稱為單鏈表,它是指通過一組任意的存儲(chǔ)單元來存儲(chǔ)線性表中的數(shù)據(jù)元素。為了建立數(shù)據(jù)元素之間的線性關(guān)系,對(duì)每個(gè)鏈表結(jié)點(diǎn),除存放元素自身的信息外,還需要存放一個(gè)指向其后繼的指針。
單鏈表中結(jié)點(diǎn)類型的描述如下:
typedefstructLNode{//定義單鏈表節(jié)點(diǎn)類型
ElemTypedata;//數(shù)據(jù)域
structLNode*next;//指針域
};LNode,*LinkList;
單鏈表的基本操作
1.初始化
單鏈表的初始化操作就是構(gòu)造一個(gè)空表。
具體代碼:
//初始化單鏈表
voidInitList(LinkListL)//構(gòu)造一個(gè)空的單鏈表L
L=newLNode;//生成新節(jié)點(diǎn)作為頭節(jié)點(diǎn),用頭指針L指向頭節(jié)點(diǎn)
L-next=NULL;//頭節(jié)點(diǎn)的指針域置空
2.取值
和順序表不同,在鏈表中并沒有存儲(chǔ)在物理相鄰的單元中。所以我們只能從鏈表的首節(jié)點(diǎn)出發(fā),順著鏈域next逐個(gè)節(jié)點(diǎn)向下訪問。
具體代碼:
//單鏈表的取值
boolGetElem(LinkListL,inti,ElemTypee)
LinkListp=L-next;intj=1;//初始化,p指向首元節(jié)點(diǎn),計(jì)數(shù)器j初值為1
while(pji)//順著鏈域向后查找,直到p為空或p指向第i個(gè)元素
p=p-next;//p指向下一個(gè)節(jié)點(diǎn)
++j;//計(jì)數(shù)器j相應(yīng)加1
if(!p||ji)returnfalse;//i值不合法
e=p-data;//取第i個(gè)節(jié)點(diǎn)的數(shù)據(jù)域
returntrue;
3.查找
從鏈表的首元節(jié)點(diǎn)出發(fā),依次將節(jié)點(diǎn)值和給定值e進(jìn)行比較,返回查找結(jié)果。
具體代碼:
//單鏈表的查找
boolLocateElem(LinkListL,LNode*p,ElemTypee)
//在單鏈表中查找第一個(gè)數(shù)據(jù)為e的結(jié)點(diǎn)
p=L-next;//p指向首元結(jié)點(diǎn)
while(pp-data!=e)
p=p-next;
if(p)
returntrue;
returnfalse;
}
4.插入
//單鏈表的插入
boolListInsert(LinkListL,inti,ElemTypee)
LinkListp=L;
LNode*s;
intj=0;
while(pji-1)//p指向第i-1個(gè)結(jié)點(diǎn)
p=p-next;
j++;
if(!p||i1)//i大于表長+1或小于1,插入位置不合法
returnfalse;
s=newLNode;
s-data=e;
s-next=p-next;
p-next=s;
returntrue;
5.刪除
//單鏈表的刪除
boolListDelete(LinkListL,inti,ElemTypee)
//將單鏈表的第i個(gè)結(jié)點(diǎn)刪除
LinkListp=L;
LNode*q;
intj=0;
while(p-nextji-1)//p指向第i-1個(gè)結(jié)點(diǎn)
p=p-next;
j++;
if(!(p-next)||i1)//i大于表長或小于1,刪除位置不合法
returnfalse;
q=p-next;//臨時(shí)保存被刪結(jié)點(diǎn)的地址以備釋放
p-next=q-next;
e=q-data;//保存被刪結(jié)點(diǎn)的數(shù)據(jù)
deleteq;//釋放被刪結(jié)點(diǎn)的空間
returntrue;
示例代碼
直接上代碼:
LinkList.h
#pragmaonce
typedefstructLINKLIST{
void*data;
structLINKLIST*pNext;
}LinkList;
typedefvoid(*PrintLinkList)(void*);
//無頭的鏈表
classLinkNode
public:
LinkNode();
~LinkNode();
voidinsertLinkList(intpos,void*data);
voidremoveByPosInLinkList(intpos);
intgetSizeLinkList();
intfindValueInLinkList(void*value);
LinkList*getFirstNodeLinkList();
voidprintLinkList(PrintLinkListprint);
private:
LinkList*m_pHead;
intm_size;
};
LinkList.cpp
//LinkList.cpp
#include"LinkList.h"
#includeiostream
usingnamespacestd;
LinkNode::LinkNode()
m_pHead=newLinkList;
m_pHead-data=nullptr;
m_pHead-pNext=nullptr;
m_size=0;
LinkNode::~LinkNode()
if(m_pHead!=nullptr)
while(m_pHead!=nullptr)
LinkList*pNext=m_pHead-pNext;
deletem_pHead;
m_pHead=nullptr;
m_pHead=pNext;
voidLinkNode::insertLinkList(intpos,void*data)
if(m_pHead==nullptr)
return;
if(data==nullptr)
return;
//插入位置矯正
if(pos0||posm_size)
pos=m_size;
LinkList*insertNode=newLinkList;
insertNode-data=data;
insertNode-pNext=nullptr;
//找到前一個(gè)位置(pos從0開始)
LinkList*pPre=m_pHead;
for(inti=0;ipos;++i)
pPre=pPre-pNext;
//有頭節(jié)點(diǎn)的鏈表
insertNode-pNext=pPre-pNext;
pPre-pNext=insertNode;
m_size++;
voidLinkNode::removeByPosInLinkList(intpos)
if(m_pHead==nullptr)
return;
if(pos0||pos=m_size)
return;
//找到前一個(gè)位置(pos從0開始)
LinkList*pPre=m_pHead;
for(inti=0;ipos;++i)
pPre=pPre-pNext;
LinkList*delNode=pPre-pNext;
pPre-pNext=delNode-pNext;
deletedelNode;
delNode=nullptr;
m_size--;
intLinkNode::getSizeLinkList()
returnm_size;
intLinkNode::findValueInLinkList(void*value)
intnPos=-1;
if(m_pHead==nullptr)
returnnPos;
if(value==nullptr)
returnnPos;
LinkList*pHead=m_pHead;
for(inti=0;im_size;++i)
//有空的頭節(jié)點(diǎn)
pHead=pHead-pNext;
if(pHead-data==value)
nPos=i;
break;
returnnPos;
LinkList*LinkNode::getFirstNodeLinkList()
if(m_pHead==nullptr)
returnnullptr;
returnm_pHead-pNext;//有空的頭節(jié)點(diǎn)
voidLinkNode::printLinkList(PrintLinkListprint)
if(m_pHead==nullptr)
return;
//不能直接移動(dòng)頭節(jié)點(diǎn),需要保留頭節(jié)點(diǎn)
LinkList*pTemp=m_pHead;
pTemp=pTemp-pNext;
while(pTemp!=nullptr)
print(pTemp-data);
pTemp=pTemp-pNext;
coutendl;
}
mian.cpp
#includeiostream
#include"LinkList.h"
usingnamespacestd;
typedefstructPERSON{
charname[64];
intage;
intscore;
}Person;
voidmyPrint(void*data)
Person*p=(Person*)data;
cout"name:"p-name"age:"p-age"score:"p-scoreendl;
voidtest()
LinkNode*plinkList=newLinkNode;
Personp1={"husdh",23,78};
Personp2={"hudfs",23,98};
Personp3={"術(shù)后",23,78};
Personp4={"喀什",23,67};
plinkList-insertLinkList(0,p1);
plinkList-insertLinkList(1,p2);
plinkList-insertLinkList(2,p3);
plinkList-insertLinkList(3,p4);
plinkList-printLinkList(myPrint);
cout"鏈表的節(jié)點(diǎn)數(shù):"plinkList-getSizeLinkList()endl;
plinkList-removeByPosInLinkList(1);
cout"remove"endl;
plinkList-printLinkList(myPrint);
cout"刪除后鏈表的節(jié)點(diǎn)數(shù):"plinkList-getSizeLinkList()end
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 私人轉(zhuǎn)讓汽車合同協(xié)議書
- 2024年視聽周邊設(shè)備:耳機(jī)項(xiàng)目資金需求報(bào)告代可行性研究報(bào)告
- 二手車中間人合同協(xié)議書
- 2024年力與變形檢測儀項(xiàng)目資金申請(qǐng)報(bào)告代可行性研究報(bào)告
- 品牌項(xiàng)目合同協(xié)議書范本
- 樓房出租合同協(xié)議書圖片
- 合同協(xié)議書心得
- 作業(yè)托管合同協(xié)議書
- 房子主頁合同協(xié)議書
- 消費(fèi)安全協(xié)議書合同
- 程序設(shè)計(jì)高級(jí)應(yīng)用(Java程序設(shè)計(jì))知到智慧樹章節(jié)測試課后答案2024年秋山東勞動(dòng)職業(yè)技術(shù)學(xué)院
- 《大氣污染物綜合排放標(biāo)準(zhǔn)》編制說明
- 2025年教師資格考試高級(jí)中學(xué)學(xué)科知識(shí)與教學(xué)能力物理試題與參考答案
- 養(yǎng)老機(jī)構(gòu)入住潛在風(fēng)險(xiǎn)告知書1-3-5
- 西華師范大學(xué)《景觀生態(tài)學(xué)》2022-2023學(xué)年第一學(xué)期期末試卷
- 北京四中2025屆高一物理第一學(xué)期期中經(jīng)典試題含解析
- 山西煤矸石綜合開發(fā)利用項(xiàng)目可行性研究報(bào)告
- 《剪映專業(yè)版:短視頻創(chuàng)作案例教程(全彩慕課版)》 課件 第5章 創(chuàng)作城市宣傳片
- 手術(shù)分級(jí)目錄(2023年修訂)
- 期中 (試題) -2024-2025學(xué)年人教PEP版(2024)英語三年級(jí)上冊(cè)
- 企業(yè)名稱:個(gè)人防護(hù)用品(PPE)管理規(guī)定
評(píng)論
0/150
提交評(píng)論