十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無(wú)憂售后,網(wǎng)站問題一站解決
C++ 鏈表
成都創(chuàng)新互聯(lián)主營(yíng)海淀網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,app軟件定制開發(fā),海淀h5小程序定制開發(fā)搭建,海淀網(wǎng)站營(yíng)銷推廣歡迎海淀等地區(qū)企業(yè)咨詢
之前一直沒怎么在意C++中的鏈表,但是突然一下子讓自己寫,就老是出錯(cuò)。沒辦法,決定好好惡補(bǔ)一下該方面的知識(shí),也為今后的數(shù)據(jù)結(jié)構(gòu)大下個(gè)良好的基礎(chǔ),于是我總結(jié)出以下幾點(diǎn),有些地方可能不正確,還望大家不吝賜教,旨在共同進(jìn)步。
總結(jié):
1、鏈表List的基本單元是節(jié)點(diǎn)Node,因此想要操作方便,就必須為每一步打好基礎(chǔ),Node的基本結(jié)構(gòu)如下:
class Node{ public: int data; Node *next; Node(int da=0,Node *p=NULL){ this->data=da; this->next=p; } };
我們可以看出,Node的成員變量一共有兩個(gè),都是public,因?yàn)槲覀円獙?duì)這兩個(gè)變量進(jìn)行操作,所以不能是private類型的。然后是一個(gè)構(gòu)造函數(shù),第二個(gè)參數(shù)默認(rèn)值為NULL,也就是說(shuō)如果我們創(chuàng)建新節(jié)點(diǎn)時(shí)只指定第一個(gè)參數(shù),而不寫第二個(gè)參數(shù),那么它默認(rèn)的就是NULL,以這種方式可以更靈活的使用Node,個(gè)人建議這么使用哦。
2、第二步就是創(chuàng)建我們的鏈表了,同樣我們這里先給出鏈表的代碼,在進(jìn)行一一的解釋。
class List{ private: Node *head,*tail; int position; public: List(){head=tail=NULL;}; ~List(){delete head;delete tail;}; void print(); void Insert(int da=0); void Delete(int da=0); void Search(int da=0); };
我們這里面有兩個(gè)數(shù)據(jù)類型,一個(gè)是Node。另一個(gè)是指代節(jié)點(diǎn)位置的成員變量(起不到什么作用,且不去管它吧)。使用head和tail來(lái)命名便是為了見名知意,使操作更加準(zhǔn)確。然后是重要的六個(gè)函數(shù),各自的功能不言而喻咯,其實(shí)最重要的是在每一個(gè)函數(shù)中我們都默認(rèn)能操作head和tail兩個(gè)成員變量,這樣能簡(jiǎn)化我們的參數(shù)列表,使得函數(shù)更加優(yōu)雅。
下面是我的一個(gè)單鏈表的實(shí)現(xiàn),包含創(chuàng)建鏈表,插入值,刪除特定的值,查找特定值得在鏈表中的位置。
#includeusing namespace std; class Node{ public: int data; Node *next; Node(int da=0,Node *p=NULL){ this->data=da; this->next=p; } }; class List{ private: Node *head,*tail; int position; public: List(){head=tail=NULL;}; ~List(){delete head;delete tail;}; void print(); void Insert(int da=0); void Delete(int da=0); void Search(int da=0); int getValueAt(int position); void setValueAt(int position,int da); }; int List::getValueAt(int position){ Node *p=head; if(p==NULL){ cout<<"The List is Empty!"< next; } if(p==NULL){ cout<<"There is no value of this position in this List!"< data< data; } void List::setValueAt(int position,int da){ Node *p=head; if(p==NULL){ cout<<"The List is Empty!"< next; } if(p==NULL){ cout<<"There is No Position in this List!"< data=da; cout<<"The Value in this position has been Updated!"< data!=da){ p=p->next; count++; } cout<<"the value you want to search is at position %d"< data!=da){ q=p; p=p->next; } q->next=p->next; cout<<"The Deletion Operation had been finished!"< next=NULL; tail->next=NULL; }else{ Node *p=new Node(da); tail->next=p; tail=p; tail->next=NULL; } } void List::print(){ Node *p=head; while(p!=NULL){ cout< data<<" \a"; p=p->next; } cout<
下面是代碼運(yùn)行后的結(jié)果:
好了,單鏈表的基本操作大致就是這樣了,希望我們都能從中有所收獲。如果您發(fā)現(xiàn)代碼中有什么錯(cuò)誤,還望不吝賜教,讓我們共同進(jìn)步吧。
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!