• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆-145  評(píng)論-173  文章-70  trackbacks-0

            異質(zhì)節(jié)點(diǎn)鏈表,就是說(shuō)對(duì)于不是同一個(gè)類型的節(jié)點(diǎn),也讓它們構(gòu)成一個(gè)鏈表,而且可以通過(guò)遍歷指針的方法來(lái)實(shí)現(xiàn)遍歷,輸出,插入,刪除等。

            此處我解決的辦法是:進(jìn)行抽象,得到它們的共性,然后將它們放在一個(gè)公共的基類中,定義接口,即虛函數(shù),然后這些類的訪問(wèn),都可以通過(guò)虛函數(shù)來(lái)實(shí)現(xiàn),就是基類的指針作為遍歷指針,指向?qū)嶋H的對(duì)象,然后就可以實(shí)現(xiàn)輸出各個(gè)節(jié)點(diǎn)的信息了。

            #pragma warning(disable:4996

            #include 
            <iostream>

            using namespace std;
            const int MAX = 25;

            class Base{
            public:
             
            char name[MAX];
             
            int age;
             
            char social_Num[MAX];
             
            virtual void print(){}
             
            virtual void set_next(Base *p){}
             
            virtual Base *get_next()return NULL;}
            }
            ;

            class Student:public Base{
             
            char grad[MAX];
             
            double average_score;
            public:
             Base 
            *next;
             Student(
            char *name,int age1,char *social,char *grad,double average):next(NULL){
              strcpy(
            this->name,name);
              
            this->age = age1;
              strcpy(
            this->social_Num,social);
              strcpy(
            this->grad,grad);
              
            this->average_score = average;
             }

             
            void set_next(Base *p){  next = p;}
             Base 
            *get_next()return this->next; }
             
            void print(){
              cout 
            << "姓名: "<<this->name << "\t年齡:" << this->age << "\n社會(huì)保險(xiǎn)號(hào):"
               
            << this->social_Num << "\t年級(jí):" << this->grad << "\t\t平均成績(jī):" << this->average_score << endl;
             }

            }
            ;

            class Clerk:public Base{
             
            double wage;
            public:
             Base 
            *next;
             Clerk(
            char *name,int age1,char *social,double wage1):next(NULL){
              strcpy(
            this->name,name);
              
            this->age = age1;
              strcpy(
            this->social_Num,social);
              
            this->wage = wage1;
             }

             
            void set_next(Base *p){  next = p;}
             Base 
            *get_next()return this->next;}
             
            void print(){
              cout 
            << "姓名: "<<this->name << "\t年齡:" << this->age << "\n社會(huì)保險(xiǎn)號(hào):"
               
            << this->social_Num << "\t工資:" << this->wage  << endl;
             }

            }
            ;

            class Professer:public Base{
             
            double wage;
             
            char major[MAX];
            public:
             Base 
            *next;
             Professer(
            char *name,int age1,char *social,double wage1,char *major1):next(NULL){
              strcpy(
            this->name,name);
              
            this->age = age1;
              strcpy(
            this->social_Num,social);
              
            this->wage = wage1;
              strcpy(
            this->major,major1);
             }

             
            void set_next(Base *p){  next = p;}
             Base 
            *get_next()return this->next;}
             
            void print(){
              cout 
            << "姓名: "<<this->name << "\t年齡:" << this->age << "\n社會(huì)保險(xiǎn)號(hào):"
               
            << this->social_Num << "\t工資:" << this->wage << "\t研究方向:" << this->major << endl;
             }

            }
            ;


            class List{//逆序建立鏈表
             Base *head;
            public:
             List(Base 
            *p){
              head 
            = p;
              p
            ->set_next(NULL); //將插入節(jié)點(diǎn)域的next賦值為NULL
             }

             
            void insert(Base *p){
              p
            ->set_next(head); //新的節(jié)點(diǎn)插入前面,建立兩個(gè)節(jié)點(diǎn)之間的聯(lián)系,即使不是同一個(gè)類,也可以利用指針
              head = p;  //重置初始表頭指針
             }

             
            void delete_list(Base *p)
              Base 
            *tmp = head;
              
            while(tmp->get_next()!= p){
               tmp 
            = tmp->get_next();
              }

              Base 
            *tmp2 = tmp->get_next()->get_next();
              delete tmp
            ->get_next();  //刪除那個(gè)中間的節(jié)點(diǎn)
              tmp->set_next(tmp2);
             }

             
            void print(){
              Base 
            *ptmp = head;
              
            while(ptmp->get_next()!=NULL){
               ptmp
            ->print();
               ptmp 
            = ptmp->get_next();
              }

              ptmp
            ->print(); //輸出最后一個(gè),因?yàn)楹罄^節(jié)點(diǎn)為NULL,所以特殊處理
             }

            }
            ;
            //可以實(shí)現(xiàn)的是輸出,而且是滿足虛函數(shù)的特性,這里針對(duì)的是next指針和print虛函數(shù),從結(jié)果可以看到,是根據(jù)虛指針
            //實(shí)際指向的單元的類型來(lái)輸出的。next指針都是Base *類型的,不過(guò)輸出的不是Base的信息(那樣就沒(méi)有輸出了),
            //而是實(shí)際指向的類型,比如這里的是Clerk。
            int main()
            {
             Student student(
            "jack",20,"132343","g1",87.8);
             Clerk clerk(
            "Clerk",34,"23434",1000);
             Professer professer(
            "Professor",50,"234356",10000,"computer");
             List aList(
            &student);
             aList.insert(
            &clerk);
             aList.insert(
            &professer);
             aList.print();
             
            return 0;
            }


             
            posted on 2010-01-26 00:46 deercoder 閱讀(974) 評(píng)論(0)  編輯 收藏 引用

            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            人妻精品久久无码区| 午夜福利91久久福利| 99久久精品九九亚洲精品| 国产韩国精品一区二区三区久久| 精品国产日韩久久亚洲| 久久91精品国产91| 亚洲AV无一区二区三区久久 | 日韩人妻无码精品久久免费一| 久久午夜伦鲁片免费无码| 国产成人精品白浆久久69| 99久久国产综合精品网成人影院| 伊人热热久久原色播放www| 伊人久久无码中文字幕| 久久久久综合网久久| 嫩草伊人久久精品少妇AV| 91麻精品国产91久久久久 | 亚洲乱码中文字幕久久孕妇黑人 | 久久影院久久香蕉国产线看观看| 亚洲精品乱码久久久久久| 香蕉99久久国产综合精品宅男自| 男女久久久国产一区二区三区| 久久青青草原精品国产不卡| 热久久这里只有精品| 久久99精品国产麻豆宅宅| 久久久久亚洲AV成人网人人网站 | 国产精品VIDEOSSEX久久发布| 国产一区二区精品久久| 国内精品人妻无码久久久影院| 亚洲AV无码久久| 久久久久亚洲精品天堂| 国产精品久久99| 91精品国产91久久久久久青草| 日本久久久精品中文字幕| 国产成人精品白浆久久69| 国产精品免费看久久久香蕉| 久久精品国产精品亚洲人人 | 久久久久久精品成人免费图片| 亚洲国产视频久久| 久久久久亚洲AV片无码下载蜜桃| 国产999精品久久久久久| 久久只这里是精品66|