資源描述:
《vc程序設(shè)計(jì)鏈表與鏈表的基本操作》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、VC++程序設(shè)計(jì)鏈表與鏈表的基本操作鏈表是一種動(dòng)態(tài)地進(jìn)行存儲(chǔ)分配的結(jié)構(gòu)。最簡(jiǎn)單的鏈表稱為單向鏈表,如圖所示:1249A1356B1475C1021DNULLHead1249135614751021特點(diǎn):1。頭指針變量head,它存放一個(gè)地址,用于指向一個(gè)元素。鏈表中的一個(gè)元素稱為結(jié)點(diǎn)。2。每個(gè)結(jié)點(diǎn)至少應(yīng)包含兩個(gè)部分:一為用戶需要的實(shí)際數(shù)據(jù),二為下一個(gè)結(jié)點(diǎn)的地址。3?!氨砦病钡牡刂凡糠址乓粋€(gè)“Null”(表示“空地址”)。表示鏈表的最后一個(gè)元素,該元素不再指向其它元素。簡(jiǎn)單鏈表鏈表中各元素在內(nèi)存中一般是不連續(xù)的。要找某一元素,必須先找到上一個(gè)元素,根據(jù)它提供的下一個(gè)
2、元素的地址才能找到下一個(gè)元素??梢?,如果不提供頭指針,則整個(gè)鏈表都無法訪問。由于鏈表的每個(gè)結(jié)點(diǎn)中都必須包含一個(gè)指向下一結(jié)點(diǎn)的指針變量和一個(gè)結(jié)點(diǎn)數(shù)據(jù),因此可以用前面介紹的結(jié)構(gòu)體類型的變量實(shí)現(xiàn)。在定義一個(gè)結(jié)構(gòu)體類型時(shí),包含若干成員,而其中成員之一必須是一個(gè)指針變量,該指針變量用于指向下一個(gè)具有相同結(jié)構(gòu)體類型的變量---“結(jié)點(diǎn)”。structstudent{intnum;intscore;student*next;};建立鏈表一般包括以下幾個(gè)步驟:1、建立鏈表頭head2、使用動(dòng)態(tài)內(nèi)存分配技術(shù),在內(nèi)存中動(dòng)態(tài)建立鏈表中的各個(gè)結(jié)點(diǎn),并使鏈表頭head指針next指向第一結(jié)點(diǎn)
3、,同時(shí),每個(gè)結(jié)點(diǎn)的next指針逐一指向下一結(jié)點(diǎn)。3、使鏈尾結(jié)點(diǎn)的指針next指向空結(jié)點(diǎn)NULL。例:寫一函數(shù)建立一個(gè)有3名學(xué)生數(shù)據(jù)(學(xué)號(hào)、成績(jī))的單向鏈表(以輸入num為0表示結(jié)束輸入)。structstudent{intnum;intscore;student*next;};student*head,*p1,*p2;1104189.5next1104390next1104785NULLnumscorenext$7.1建立鏈表headp1p21104189nextn=1if(p1->num!=0)head=p1=p2=newstudent;headp1p21104
4、189nextn=2p1=newstudentif(p1->num!=0)P2->next=p1;1104390nextp1headp1p21104189next1104390nextp2=p1headp1p21104189next1104390next1104785nextn=3p1=newstudent;headp1p21104189next1104390next1104785nextn=3if(p1->num!=0)p2->next=p1p2=p1headp1p21104189.5next1104390next1104785NULLn=4p1=newstud
5、ent;if(p1->num==0)p2->next=NULL;return(head);00//建立鏈表的C++語言函數(shù)如下:student*creat(void){student*head,*p1,*p2;number=0;//結(jié)點(diǎn)記數(shù)器,全局變量head=NULLp1=p2=newstudent;//產(chǎn)生第一個(gè)結(jié)點(diǎn)cout<<"num:";cin>>p1->num;cout<<"score:";cin>>p1->score;while(p1->num!=0){number++;//結(jié)點(diǎn)記數(shù)器if(number==1)head=p1;elsep2->next=
6、p1;p2=p1;p1=newstudent;//產(chǎn)生下一個(gè)結(jié)點(diǎn)cout<<"num:";cin>>p1->num;cout<<"score:";cin>>p1->score;}p2->next=NULL;//鏈表尾deletep1;return(head);}要輸出鏈表,首先要知道鏈表頭的地址,然后用一個(gè)指針指向第一個(gè)結(jié)點(diǎn),輸出該結(jié)點(diǎn)的數(shù)據(jù)成員p->num和p->score,再使p指向下一結(jié)點(diǎn),再輸出,直到鏈表的尾結(jié)點(diǎn)p->next==NULL。程序如下:voidprint(student*head){structstudent*p=head;cout<<"
7、Now,Thereare"<num<<'t'<score<<'';p=p->next;}while(p!=NULL);}$7.7.2輸出鏈表從一個(gè)鏈表中刪去一個(gè)結(jié)點(diǎn),并不一定是真正從內(nèi)存中把它抹掉,而是把它從鏈表中分離開來,即改變鏈接關(guān)系。headp11104189next1104390next1104785NULL初始p1=head;$7.7.3對(duì)鏈表的刪除操作headp1p21104189next1104390next1104785NULL如果
8、不是要?jiǎng)h除