• <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>
            posts - 6,  comments - 30,  trackbacks - 0

            近日已經臨近考試了,想起啊我還有一個數據結構關于鏈表的實驗未作,昨天折騰了一晚上,但是有個問題還是未解決。
            其問題就是:
            一個學生的信息:
            1、姓名
            2、學號
            3、性別
            4、年齡
            用一個鏈表將其連接起來,從外界輸入一個年齡,將與該年齡一樣的學生全從鏈表中刪除

            分析:對于該實驗給出一個
            ADT student
            操作對象:其基本信息(私有成員變量)
            基本操作:
            student();//構造默認參數學生
            student(char *name,char *sex,int age);//構造指定參數的學生
            ~student()://刪除學生
            display();//顯示學生信息
            student &operator=(student &s);//重載=用于后面鏈表的賦值
            對于鏈表的結構
            ADT Link
            操作對象:學生Student
            Link()//構造空表
            Delete()//刪除一個元素
            Add(Student &s)//向鏈表中添加s
            Display()//顯示鏈表
            ~Link();//釋放鏈表
            其代碼如下:
              1#include<iostream>
              2#include<string>
              3using namespace std;
              4class Link;
              5/*
              6**對于學號的問題還在研究中,由于拷貝函數、構造函數用的比較雜,沒有實現每次加1,但是鏈表功能還是實現了
              7*/

              8class Student{
              9        friend class Link;
             10public:
             11        Student();
             12        Student(Student &);
             13        Student(char *name,char* sex,int age);
             14        void display();
             15        Student &operator=(Student &s);
             16        ~Student();
             17private:
             18        char *Name;
             19        int age;
             20        char *Sex;
             21        int no;
             22        Student *next;
             23        int static Stu_no;
             24}
            ;
             25int Student::Stu_no=2009000;
             26Student::Student(){
             27        no=Stu_no++;
             28        Name=new char[2];
             29        strcpy(Name,"X");
             30        Sex=new char[4];
             31        strcpy(Sex,"Boy");
             32        age=20;
             33}

             34Student::Student(char *name,char* sex,int age){
             35        no=Stu_no++;
             36        this->age=age;
             37        Name=new char[strlen(name)+1];
             38        strcpy(Name,name);
             39        Sex=new char[strlen(sex)+1];
             40        strcpy(Sex,sex);
             41}

             42Student::Student(Student &s){
             43        no=Stu_no++;
             44        this->age=s.age;
             45        Name=new char[strlen(s.Name)+1];
             46        strcpy(Name,s.Name);
             47        Sex=new char[strlen(s.Sex)+1];
             48        strcpy(Sex,s.Sex);
             49        next=new Student;
             50}

             51Student &Student::operator =(Student &s){
             52        this->age=s.age;
             53        Name=new char[strlen(s.Name)+1];
             54        strcpy(Name,s.Name);
             55        Sex=new char[strlen(s.Sex)+1];
             56        strcpy(Sex,s.Sex);
             57        return *this;
             58}

             59Student::~Student(){
             60        delete []Name;
             61        delete []Sex;
             62        Stu_no--;
             63}

             64void Student::display(){
             65        cout<<Name<<" "<<no<<" "<<Sex<<" "<<age<<endl;
             66}

             67class Link{
             68public:
             69        Link();
             70        void Delete(int);
             71        void Add(Student& s);
             72        void Display();
             73        ~Link();
             74private:
             75        Student *pHead;
             76        Student *pTail;
             77        Student *pivot;
             78}
            ;
             79Link::Link(){//構造空鏈表
             80        pHead=NULL;;
             81        pTail=NULL;
             82        pivot=NULL;
             83}

             84Link::~Link(){//釋放內存
             85        pivot=pHead;
             86        Student *p;
             87        while(pivot){
             88                p=pivot;
             89                pivot=pivot->next;
             90                delete p;
             91        }

             92}
                            
             93void Link::Add(Student &s){//向鏈表中加如學生s
             94        if(pHead==NULL){
             95                pHead = new Student(s);
             96                pTail=pHead;
             97                pTail->next=NULL;
             98        }

             99        else{
            100                Student *st=new Student(s);
            101            pTail->next=st;
            102                pTail=st;
            103                pTail->next=NULL;
            104        }

            105
            106}

            107void Link::Display(){//顯示鏈表中學生信息
            108        pivot=pHead;
            109        while(pivot){
            110                pivot->display();
            111                pivot=pivot->next;
            112        }

            113        if(pHead)//非空,每次顯示一條鏈表畫下劃線
            114                cout<<"-------------------"<<endl;
            115}

            116void Link::Delete(int age){//刪除鏈表中所有年齡為age的學生
            117        int yes=0;//記錄是否有age的學生
            118        Student *p=pHead,*q;
            119        if(p&&p->age==age){//如果鏈表首為age刪除
            120                do{
            121                        cout<<"刪去了";
            122                    pHead->display();
            123                    yes=1;
            124                    pHead=p->next;
            125                    cout<<"-------------------"<<endl;
            126                    delete p;
            127                        p=pHead;
            128                }
            while(p&&p->age==age);
            129        }

            130        while(p){//其他地方
            131                q=p->next;//q為刪除的元素,p記錄其上一個元素
            132                if(q&&q->age==age){
            133                        p->next=q->next;
            134                        cout<<"刪去了";
            135                        q->display();
            136                        yes=1;
            137                        delete q;
            138                        cout<<"-------------------"<<endl;
            139                }

            140                else if(!q&&yes==0){
            141                        cout<<"沒有"<<age<<"歲的學生"<<endl;
            142                        cout<<"-------------------"<<endl;
            143                        return;
            144                }

            145                else
            146                        p=p->next;
            147        }

            148}

            149void main(){
            150        Student s1("X","Boy",22);
            151        Student s2("Y","Boy",20);
            152        Student s3("Z","Boy",21);
            153        Student s4("U","Girl",22);
            154        Link l;
            155        l.Add(s1);        
            156        l.Add(s2);
            157        l.Add(s3);
            158        l.Add(s4);
            159        l.Display();
            160        l.Delete(21);
            161        l.Display();
            162}
            上述代碼已經實現了基本功能,只是學號問題還未解決,由于在鏈表中對Student進行操作,要構造臨時學生,但是怎么就沒有及時釋放,導致學號問題
            posted on 2011-01-08 15:12 あ維wêiセ 閱讀(1953) 評論(5)  編輯 收藏 引用 所屬分類: C++

            FeedBack:
            # re: 鏈表實驗[未登錄]
            2011-01-08 16:12 | a
            你的學生是克隆人么  回復  更多評論
              
            # re: 鏈表實驗
            2011-01-08 16:14 | あ維wêiセ
            @a
            對不起,我是學習新手,你能說明確一點嗎?  回復  更多評論
              
            # re: 鏈表實驗[未登錄]
            2011-01-08 17:32 | a
            @あ維w&#234;iセ
            鏈接add的時候new了一個學生  回復  更多評論
              
            # re: 鏈表實驗
            2011-01-08 18:08 | hi
            原則上Student不該存在next成員指針,它應該只建立學生信息的數據結構.
            你另外寫個LinkNode結構體,里面實現鏈表數據結構的規則.
            你現在的Link (鏈表)類你實現對LinkNode的操作.
            應該就沒那么復雜了。  回復  更多評論
              
            # re: 鏈表實驗
            2011-01-09 07:45 | OnTheWay
            我依據你寫的這篇文章也發表了一篇文章,可能解決你的問題,有空的時候請到我博客看一下。  回復  更多評論
              
            <2011年12月>
            27282930123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567

            常用鏈接

            留言簿(1)

            隨筆分類

            隨筆檔案

            文章分類

            文章檔案

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            精品多毛少妇人妻AV免费久久| 久久成人国产精品| 亚洲精品无码久久久久AV麻豆| 久久国产免费直播| 精品国产一区二区三区久久久狼| 日本福利片国产午夜久久| 久久综合精品国产一区二区三区 | 中文无码久久精品| 99久久久精品免费观看国产| 久久久91人妻无码精品蜜桃HD | 久久高清一级毛片| 午夜天堂av天堂久久久| 国产精品女同一区二区久久| 亚洲国产精品无码久久| 久久久WWW成人| 国产精品久久久久影视不卡| 国产成人无码精品久久久性色| 66精品综合久久久久久久| 欧美激情一区二区久久久| 久久美女网站免费| 狼狼综合久久久久综合网| 三级韩国一区久久二区综合| 狠狠干狠狠久久| 九九久久自然熟的香蕉图片| 久久久国产99久久国产一| 精品人妻伦一二三区久久| 成人资源影音先锋久久资源网| 亚洲午夜久久久久妓女影院| 伊人久久无码精品中文字幕| 色婷婷狠狠久久综合五月| 国产伊人久久| 午夜精品久久久久久影视777| 久久精品无码av| 久久中文字幕无码专区| 欧美亚洲日本久久精品| 欧美国产成人久久精品| 青青久久精品国产免费看| 午夜视频久久久久一区| 亚洲v国产v天堂a无码久久| 一本大道久久香蕉成人网| 青青草原综合久久大伊人|