C/C++中結(jié)構(gòu)體(struct)知識(shí)點(diǎn)強(qiáng)化(三)

字號(hào):

下面我們來(lái)說(shuō)一下鏈表節(jié)點(diǎn)的刪除!
     我們以上面的程序?yàn)榛A(chǔ),但為了我們方便學(xué)習(xí)刪除我們休整結(jié)構(gòu)體為
     struct test
     {
     int number;
     float socre;
     test *next;
     };
     number為的編號(hào)每一個(gè)節(jié)點(diǎn)的。
     刪除的我就不多說(shuō)了,里面重要部分有注解。
     特別注意deletel函數(shù)的參數(shù)意義,指針的引用在這里很重要,如果只是指針,或者只是應(yīng)用都是不行的,為什么仔細(xì)思考,很多知名的教材在這一問題上都很模糊,而且很多書還有錯(cuò)誤,程序不錯(cuò),但思路是錯(cuò)的,我這里特別不說(shuō),請(qǐng)大家仔細(xì)閱讀程序,如果還是有問題,可以回此帖,我會(huì)回答的。 來(lái)源:www.examda.com
     完整代碼如下:
     #include
     using namespace std;
     struct test
     {
     int number;
     float socre;
     test *next;
     };
     test *head;//創(chuàng)建一個(gè)全局的引導(dǎo)進(jìn)入鏈表的指針
     test *create()
     {
     test *ls;//節(jié)點(diǎn)指針
     test *le;//鏈尾指針
     ls = new test;//把ls指向動(dòng)態(tài)開辟的堆內(nèi)存地址
     cin>>ls->number>>ls->socre;
     head=NULL;//進(jìn)入的時(shí)候先不設(shè)置head指針指向任何地址,因?yàn)椴恢朗欠褚簧蟻?lái)就輸入null跳出程序
     le=ls;//把鏈尾指針設(shè)置成剛剛動(dòng)態(tài)開辟的堆內(nèi)存地址,用于等下設(shè)置le->next,也就是下一個(gè)節(jié)點(diǎn)的位置
     while(ls->number!=0)//創(chuàng)建循環(huán)條件為ls->number的值不是null,用于循環(huán)添加節(jié)點(diǎn)
     {
     if(head==NULL)//判斷是否是第一次進(jìn)入循環(huán)
     {
     head=ls;//如果是第一次進(jìn)入循環(huán),那么把引導(dǎo)進(jìn)入鏈表的指針指向第一次動(dòng)態(tài)開辟的堆內(nèi)存地址
     }
     else
     {
     le->next=ls;//如果不是第一次進(jìn)入那么就把上一次的鏈尾指針的le->next指向上一次循環(huán)結(jié)束前動(dòng)態(tài)創(chuàng)建的堆內(nèi)存地址
     }
     le=ls;//設(shè)置鏈尾指針為當(dāng)前循環(huán)中的節(jié)點(diǎn)指針,用于下一次進(jìn)入循環(huán)的時(shí)候把上一次的節(jié)點(diǎn)的next指向上一次循環(huán)結(jié)束前動(dòng)態(tài)創(chuàng)建的堆內(nèi)存地址
     ls=new test;//為下一個(gè)節(jié)點(diǎn)在堆內(nèi)存中動(dòng)態(tài)開辟空間
     cin>>ls->number>>ls->socre;
     }
     le->next=NULL;//把鏈尾指針的next設(shè)置為空,因?yàn)椴还苋绾窝h(huán)總是要結(jié)束的,設(shè)置為空才能夠在循環(huán)顯鏈表的時(shí)候不至于死循環(huán)
     delete ls;//當(dāng)結(jié)束的時(shí)候最后一個(gè)動(dòng)態(tài)開辟的內(nèi)存是無(wú)效的,所以必須清除掉
     return head;//返回鏈?zhǔn)字羔?BR>     }
     void showl(test *head)
     {
     cout<<"鏈?zhǔn)字羔?"< <
     while(head)//以內(nèi)存指向?yàn)閚ull為條件循環(huán)顯示先前輸入的內(nèi)容 來(lái)源:www.examda.com
     {
     cout< number<<"|"< socre<
     head=head->next;
     }
     }