亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        C++的基于函數(shù)模板實(shí)現(xiàn)單向鏈表

        2017-02-05 05:42:26宮彥軍史小飛
        關(guān)鍵詞:運(yùn)算符鏈表指針

        宮彥軍 史小飛

        ?

        C++的基于函數(shù)模板實(shí)現(xiàn)單向鏈表

        宮彥軍1史小飛2

        (1.湖南科技學(xué)院 電子與信息工程學(xué)院,湖南 永州 425199;2.湖南科技學(xué)院 圖書館,湖南 永州 425199)

        在“C++程序設(shè)計(jì)”教學(xué)中函數(shù)模板部分是難點(diǎn),文章給出利用鏈表函數(shù)模板實(shí)現(xiàn)單向鏈表節(jié)點(diǎn)的創(chuàng)建、有序插入和刪除的操作,文章中的鏈表函數(shù)模板可以實(shí)現(xiàn)具有任意數(shù)據(jù)域的單向鏈表節(jié)點(diǎn)的創(chuàng)建、有序插入和刪除,只是要事先設(shè)計(jì)好鏈表的數(shù)據(jù)類或者數(shù)據(jù)類型,對于有序插入,數(shù)據(jù)類型具有比較運(yùn)算,如果是數(shù)據(jù)類,需要重載數(shù)據(jù)類的比較運(yùn)算符。

        C++語言;構(gòu)造函數(shù);調(diào)用

        1 引 言

        C++語言中的函數(shù)模板能提高編程的效率[1]。文獻(xiàn)[2]采用漸進(jìn)式的三步教學(xué)法進(jìn)行函數(shù)模板的教學(xué),能取得良好的教學(xué)效果。文獻(xiàn)[3]利用C++函數(shù)模板的方法完成模板參數(shù)類型的顯式轉(zhuǎn)換機(jī)制。文獻(xiàn)[4]研究了函數(shù)模板的概念和語法規(guī)則。文獻(xiàn)[5]從鏈表的實(shí)現(xiàn)討論C/C++與數(shù)據(jù)結(jié)構(gòu)的教學(xué)。文章利用函數(shù)模板實(shí)現(xiàn)鏈表的創(chuàng)建、插入和刪除的基本操作。

        2 鏈表的創(chuàng)建和插入函數(shù)模板

        2.1鏈表的創(chuàng)建和插入

        鏈表是一種常見的數(shù)據(jù)結(jié)構(gòu),C++語言有指針,指針是存儲變量地址的變量,C++的鏈表用類指針來實(shí)現(xiàn)的。首先定一個(gè)類,類包含一個(gè)數(shù)據(jù)元素域和一個(gè)指向本類類型指針域,下面是鏈表創(chuàng)建和插入的函數(shù)模板。

        template

        void insert(T *&head,const T1 &data)

        {//把1個(gè)數(shù)據(jù)插入鏈表

        T *pb=head,*pf; T *pi=new T;

        pi->data=data;

        if(head==NULL){

        head=pi;pi->next=NULL;}

        else{ while((pi->data<=pb->data)&&(pb->next!=NULL)){

        pf=pb;pb=pb->next;}

        if(pi->data>pb->data){

        if(head==pb){head=pi;pi->next=pb;}

        else{pf->next=pi;pi->next=pb;}

        else{pb->next=pi;pi->next=NULL;}

        }

        2.2鏈表的創(chuàng)建和插入操作

        insert這個(gè)函數(shù)模板,包含創(chuàng)建和插入兩種鏈表操作,使用時(shí)首先定義頭結(jié)點(diǎn)head,是指針,賦初值NULL,具體代碼如下,

        首先,定義包含一個(gè)數(shù)據(jù)域和指向本類指針的一個(gè)類。

        class nodei

        {public:

        nodei(){data=0;next=NULL;}int data; nodei *next;};

        nodei的數(shù)據(jù)域只包含一個(gè)整型數(shù)。

        其次,聲明一個(gè)頭結(jié)點(diǎn),即指向nodei的指針,賦初值NULL。具體代碼:nodei *numi=NULL;insert(numi,1);

        由于numi的初值為NULL,則這時(shí)的insert創(chuàng)建頭結(jié)點(diǎn),數(shù)據(jù)域存儲的是整數(shù)1。我們開發(fā)詞根分解程序用到nodei型鏈表。創(chuàng)建過程如圖1所示。

        圖1.用insert創(chuàng)建nodei型頭節(jié)點(diǎn)

        insert的第一個(gè)形參為指針引用,指針引用在調(diào)用時(shí),形參為實(shí)參的拷貝,和實(shí)參指針變量的地址相同,可以實(shí)現(xiàn)鏈表的創(chuàng)建和插入。圖2為nodei型節(jié)點(diǎn)的插入過程。

        圖2.鏈表插入

        insert的插入為順序插入,為從大到小排序,使用文章的insert函數(shù)模板,數(shù)據(jù)域的數(shù)據(jù)名稱為data,具有“<=”運(yùn)算符比較,如果數(shù)據(jù)域的數(shù)據(jù)為類,必需要重載運(yùn)算符“<=”,下面是我們編寫詞根分解程序中用到的另外一個(gè)鏈表。

        數(shù)據(jù)域的類:

        class dispart_word{

        public:

        CString word;int rootl;int rootnum;nodei *maxrootl;

        dispart_word(const CString &word="",

        const int &rootl=0,const int &rootnum=0);

        virtual ~dispart_word();

        dispart_word& operator=(const dispart_word &);

        dispart_word(const dispart_word& t);

        bool operator>(const dispart_word &);

        bool operator<=(const dispart_word &);

        bool operator!=(const dispart_word &);

        bool operator==(const dispart_word &);

        void DeleteMaxrootl();

        };

        dispart_word重載了運(yùn)算符“<=”,定義包含一個(gè)數(shù)據(jù)域dispart_word和指向本類指針的一個(gè)類。

        class node{

        public:

        node(){next=NULL;}dispart_word data; node *next;

        };

        創(chuàng)建鏈表的具體過程如下:

        node *m_record=NULL;insert(m_record,t);

        這里的t是dispart_word類的對象。執(zhí)行insert前如圖3所示,執(zhí)行insert后如圖4所示,

        圖3. node型頭結(jié)點(diǎn)初始化為NULL

        圖4.用insert創(chuàng)建node型頭節(jié)點(diǎn)

        在圖4所示的創(chuàng)建節(jié)點(diǎn)后,插入1個(gè)節(jié)點(diǎn)后如圖5所示。

        圖5. node型節(jié)點(diǎn)的插入

        從圖5可以看出在鏈表中插入1個(gè)節(jié)點(diǎn)的過程,圖5中的鏈表含有2個(gè)節(jié)點(diǎn)。

        3 刪除鏈表

        鏈表的刪除操作的函數(shù)模板如下,

        template

        void Delete(T *&head)

        {

        T *t;

        while(head!=NULL){

        t=head;head=head->next;delete t;}

        head=NULL;

        }

        圖6給出刪除前面定義的nodei型鏈表的過程,圖6(a)為nodei型鏈表刪除前,圖6(b)為nodei型鏈表刪除后。從圖6(a)可以看出刪除前鏈表包含8個(gè)數(shù)據(jù),刪除后鏈表為NULL。

        圖6.nodei型鏈表的刪除

        圖7給出刪除前面定義的node型鏈表的過程,圖7(a)為node型鏈表刪除前,圖7(b)為nodei型鏈表刪除后。從圖7(a)可以看出刪除前鏈表包含2個(gè)數(shù)據(jù),刪除后鏈表為NULL。

        圖7.node型鏈表的刪除

        結(jié) 論

        文章給出了利用函數(shù)模板實(shí)現(xiàn)鏈表的創(chuàng)建、有序插入和刪除,這里的創(chuàng)建和插入用同一個(gè)函數(shù)模板實(shí)現(xiàn)的,當(dāng)定義節(jié)點(diǎn)的指針為NULL時(shí),執(zhí)行插入操作時(shí)就是創(chuàng)建鏈表的頭節(jié)點(diǎn)。文章通過編寫的詞根分解程序中用到的2個(gè)鏈表進(jìn)行了鏈表的創(chuàng)建、有序插入和刪除的演示。

        [1] 王大志.函數(shù)模板在數(shù)據(jù)持久化中的應(yīng)用[J].電腦編程技巧與維護(hù),2013,(10):36-38.

        [2] 葛建芳.C++函數(shù)模板教學(xué)方法探討[J].福建電腦,2006, (11):213+171.

        [3] 何遠(yuǎn)強(qiáng),李全艷,彭海平,等.C++函數(shù)模板的模板參數(shù)類型轉(zhuǎn)換技術(shù)[J].科技創(chuàng)新導(dǎo)報(bào),2014,(10):19-20.

        [4] 陳偉柱.函數(shù)模板[J].程序員,2003,(12):120-123.

        [5] 胡傳福.從鏈表的實(shí)現(xiàn)論C/C++與數(shù)據(jù)結(jié)構(gòu)教學(xué)[J].東莞理工學(xué)院學(xué)報(bào),2013,(3):125-127.

        (責(zé)任編校:何俊華)

        2017-01-08

        永州市指導(dǎo)性科技創(chuàng)新及應(yīng)用研究項(xiàng)目(永科發(fā)(2016)32號);湖南省普通高等學(xué)?!笆濉睂I(yè)綜合改革試點(diǎn)項(xiàng)目(湘教通〔2016〕276號);湖南省自然科學(xué)基金資助項(xiàng)目(13JJ6079)。

        宮彥軍(1969-),男,吉林公主嶺人,湖南科技學(xué)院教授,博士,研究方向?yàn)槟繕?biāo)與環(huán)境的電磁散射與光散射特性,以及電磁(光)波傳播與散射。

        G642.0

        A

        1673-2219(2017)10-0042-03

        猜你喜歡
        運(yùn)算符鏈表指針
        老祖?zhèn)魇诨具\(yùn)算符
        基于二進(jìn)制鏈表的粗糙集屬性約簡
        偷指針的人
        跟麥咭學(xué)編程
        基于鏈表多分支路徑樹的云存儲數(shù)據(jù)完整性驗(yàn)證機(jī)制
        為什么表的指針都按照順時(shí)針方向轉(zhuǎn)動(dòng)
        基于改進(jìn)Hough變換和BP網(wǎng)絡(luò)的指針儀表識別
        電測與儀表(2015年5期)2015-04-09 11:30:42
        C++運(yùn)算符重載剖析
        鏈表方式集中器抄表的設(shè)計(jì)
        電測與儀表(2014年1期)2014-04-04 12:00:22
        ARM Cortex—MO/MO+單片機(jī)的指針變量替換方法
        日韩av中文字幕波多野九色| 国产nv精品你懂得| 婷婷色国产精品视频一区| 亚洲成av人片在久久性色av| 色婷婷久久亚洲综合看片 | 欧美放荡的少妇| 欧美视频在线观看一区二区| 蜜桃av噜噜一区二区三区香| 亚洲日本人妻少妇中文字幕| 精品久久久久久无码中文字幕| 激情内射亚洲一区二区三区爱妻 | 精品一区二区三区老熟女少妇| 国产免费三级av在线| 国产 字幕 制服 中文 在线| 亚洲AV秘 片一区二区三| 美腿丝袜中文字幕在线观看| 中文字幕av久久亚洲精品| 婷婷中文字幕综合在线| 久久青青草原亚洲AV无码麻豆| 一区二区三区夜夜久久| 日日噜噜夜夜狠狠视频 | 午夜探花在线观看| 61精品人妻一区二区三区蜜桃| 国产三级久久精品三级91| 中文字幕v亚洲日本| 99在线视频精品费观看视| 国产又湿又爽又猛的视频| 国产精品亚洲色婷婷99久久精品| 中文无码制服丝袜人妻av| 又色又爽又黄的视频网站| 国产高潮流白浆视频在线观看| 丰满人妻一区二区三区视频53| 午夜一级在线| 综合久久加勒比天然素人 | 久久精品国产在热亚洲不卡| 精品国产麻豆免费人成网站| 国产极品美女高潮无套在线观看| 亚洲中文字幕在线第二页| 日韩精品亚洲一区二区| 无码a∨高潮抽搐流白浆| 精品久久久久久国产潘金莲|