• <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>

            The Fourth Dimension Space

            枯葉北風寒,忽然年以殘,念往昔,語默心酸。二十光陰無一物,韶光賤,寐難安; 不畏形影單,道途阻且慢,哪曲折,如渡飛湍。斬浪劈波酬壯志,同把酒,共言歡! -如夢令

            張宏數據結構第二課——動態線性鏈表類(sqlist測試版) 歡迎大家測試

             

            #include <iostream>
            #include 
            <cmath>
            #include
            <algorithm>
            #include
            <cstring>
            using namespace std;

            struct node{
                
            int data;
                node 
            *next;
            };

            class sqlist
            {
            private:
                node 
            *head;
                
            int lenth;

            public:
                sqlist()
                {
                    cout
            <<"您申請了一個sqlist型對象,所占的字節數為"<<sizeof(sqlist)<<",感謝您的使用。"<<endl;
                    cout
            <<"在測試過程中如有問題,請及時向我反饋,我的聯系方式是QQ:64076241.O(∩_∩)O~"<<endl<<endl;
                    lenth
            =0;
                    head
            =NULL;
                }
                
            void initial();
                
            void creat();
                node
            *  findpos(int pos);
                
            int findnum(int num);
                
            void insert(int num,int pos);
                
            void deletenode(int pos);
                
            int len();
                
            bool empty();
                
            void reverse();
                
            void print();
                
            };

            void sqlist::initial()
            {
                
            int i=1;
                
            if(lenth==0)
                {
                    cout
            <<"表為空,無需初始化"<<endl;
                    
            return ;
                }
                
            int size=lenth;
                
            for(i=1;i<=size;i++)
                {

                    deletenode(
            1);

                }
                cout
            <<"初始化完畢"<<endl;
            }

            void sqlist::creat()
            {
                
            int temp;
                node 
            *p,*r;
                head
            =r=NULL;
                cout
            <<"請順序輸入鏈表的值,并以空格隔開,以-1做為輸入結束"<<endl;
                cin
            >>temp;
                
            while(temp!=-1)
                {
                    lenth
            ++;
                    p
            =new node;
                    p
            ->data=temp;
                    
            if(head==NULL)
                        head
            =p;
                    
            else
                        r
            ->next=p;
                    r
            =p;
                    cin
            >>temp;
                }
                
            if(r!=NULL)
                    r
            ->next=NULL;
            }

            node
            * sqlist::findpos(int pos)//返回值為NULL代表沒有找到;
            {
                node 
            *p;
                
            int i=1;
                p
            =head;
                
            if(head==NULL)
                {
                    cout
            <<"表為空"<<endl;
                        
            return NULL;
                }
                
            else if(pos>lenth||pos<1)
                {

                    cout
            <<"您的輸入超出鏈表的區間范圍"<<endl;
                    
            return NULL;

                }

                
            while(i<pos)
                {
                    p
            =p->next;
                    i
            ++;
                }
                
            return p;
            }



            int sqlist::findnum(int num)//返回值為零代表沒有找到或者輸入錯誤;
            {
                node 
            *p=head;
                
            int i=1;
                
            if(head==NULL)
                {
                    cout
            <<"鏈表為空,操作錯誤"<<endl;
                    
            return 0;
                }

                
                
            while(i<=lenth)
                {
                    
            if(p->data==num)
                        
            return i;
                    
            else
                        p
            =p->next;
                    i
            ++;
                }
                
            if(i==lenth+1)
                {
                    cout
            <<"o(╯□╰)o,沒有查找到該元素"<<endl;
                    
            return 0;
                }
            }

            void sqlist::insert(int num,int pos)
            {
                node 
            *p,*q;
                
            int i;
                
            if(lenth==0)
                {
                    cout
            <<"鏈表為空,請先建立鏈表"<<endl;
                    
            return;
                }

                
            if(pos>lenth+1||pos<1)
                {
                    cout
            <<"抱歉,此位置無效,您的輸入范圍應是1-"<<lenth+1<<"."<<endl;
                    
            return;
                }
                
            if(pos==1)
                {
                    q
            =new node;
                    q
            ->data=num;
                    q
            ->next=head;
                    head
            =q;
                    cout
            <<"成功的在"<<pos<<"位置處插入元素"<<num<<",插入成功"<<endl;
                    lenth
            ++;
                    
            return ;
                }
                p
            =findpos(pos-1);
                q
            =new node;
                q
            ->data=num;
                q
            ->next=p->next;
                p
            ->next=q;
                lenth
            ++;
                cout
            <<"成功的在"<<pos<<"位置處插入元素"<<num<<",插入成功"<<endl;

            }

            void sqlist::deletenode(int pos)
            {
                node 
            *p,*r;
                
            if(pos==1)
                {
                    p
            =head;
                    head
            =head->next;
                    delete p;
                    lenth
            --;
                    
            return ;
                }

                p
            =findpos(pos-1);
                
            if(p==NULL)
                {
                    cout
            <<"刪除結點時出現了查找錯誤,O(∩_∩)O~,pos越界了吧"<<endl;
                    
            return ;
                }
                r
            =p->next;
                p
            ->next=r->next;
                lenth
            --;
                delete r;
            }

            int sqlist::len()
            {
                cout
            <<"鏈表的長度為"<<lenth<<endl;
                
            return lenth;
            }

            bool sqlist::empty()
            {
                
            if(lenth==0)
                {
                    cout
            <<"容器為空"<<endl;
                    
            return true;
                }
                
            else
                {
                    cout
            <<"容器非空"<<endl;
                    
            return false;
                }
            }

            void sqlist::print()
            {

                node 
            *p;
                
            int i;
                p
            =head;
                i
            =1;
                
            if(lenth==0)
                {

                    cout
            <<"表為空,請先建表"<<endl;
                    
            return ;
                }
                
            while(i<=lenth)
                {
                    cout
            <<p->data<<' ';
                    p
            =p->next;
                    i
            ++;
                }
                cout
            <<"鏈表打印完畢"<<endl;

            }

            void sqlist::reverse()
            {
                node 
            *p;
                node 
            *q;
                
            int i=1;
                node 
            *r;
                
            if(lenth==0)
                {
                    cout
            <<"鏈表為空,請先建表"<<endl;
                    
            return;
                }
                
            else if(lenth==1)
                {

                    cout
            <<"鏈表長度為一,不需逆轉"<<endl;
                    
            return ;

                }
                
            else
                {
                    p
            =head;
                    q
            =p->next;
                    r
            =q->next;
                    
            while(i<lenth)
                    {
                        
            if(p==head)
                            p
            ->next=NULL;
                        q
            ->next=p;
                        p
            =q;
                        q
            =r;
                        
            if(r!=NULL)
                        r
            =r->next;
                        i
            ++;
                    }
                    head
            =p;
                }

            }



            int main ()
            {
                
            int i;
                node 
            *temp;
                cout
            <<"                          歡迎使用由sqlist線性鏈表類"<<endl;
                cout
            <<"        ——creator abilitytao ,received the guidance by Mr Zhang Hong "<<endl<<endl;
                sqlist test;
                cout
            <<"接下來將進行十分BT的數據測試."<<endl<<endl;
                cout
            <<"首先驗證建表函數和初始化函數的正確性,循環兩次,第一次請輸入1 2 3 4 5 -1,第二次直接輸入-1"<<endl;
                
            for(i=1;i<=2;i++)
                {
                    test.creat();
                    test.print();
                    test.initial();
                    test.print();
                }
                test.initial();
                cout
            <<endl;
                system(
            "pause");
                system(
            "cls");

                cout
            <<"接下來驗證findpos函數的正確性,此處我們輸入1 2 3 4 -1,并搜索pos=-1,0,1,2,3,4,5處的值"<<endl;
                test.creat();
                
            for(i=-1;i<=5;i++)
                {

                    temp
            =test.findpos(i);
                    
            if(temp==NULL)
                        cout
            <<"查找錯誤"<<endl;
                    
            else
                        cout
            <<temp->data<<endl;
                }
                cout
            <<endl;
                test.initial();
                system(
            "pause");
                system(
            "cls");
                
                
                
                cout
            <<"接下來將測試findnum函數,輸入數據為1 2 3 4 5 -1 ,我們查找4和100"<<endl;
                test.creat();
                cout
            <<"4位于"<<test.findnum(4)<<"號位置"<<endl;
                test.findnum(
            100);
                test.initial();
                cout
            <<endl;
                system(
            "pause");
                system(
            "cls");

                cout
            <<"接下來測試insert函數"<<endl;
                cout
            <<"我們輸入1 2 3 4 5 6 -1,先在4前面加上77,然后在最前面添上0,最后面添上7"<<endl;
                test.creat();
                test.insert(
            77,4);
                test.print();
                test.insert(
            0,1);
                test.print();
                cout
            <<"注意此時容器中已經有九個數了"<<endl;
                test.insert(
            7,9);
                test.print();
                test.initial();
                cout
            <<endl;
                system(
            "pause");
                system(
            "cls");
                


                cout
            <<"再讓我們來測試deletenode這個函數"<<endl;
                cout
            <<"我們輸入1 2 3 4 5 6 -1,然后從前向后依次刪除<<endl";
                test.creat();
                test.print();
                
            int test_len=test.len();
                
            for(i=1;i<=test_len;i++)
                {
                    test.deletenode(
            1);
                    test.print();
                }
                test.initial();
                cout
            <<endl;
                system(
            "pause");
                system(
            "cls");


                cout
            <<"最后讓我們來測試一下reverse(逆轉函數)"<<endl;
                cout
            <<"我們將分別輸入-1,1  -1,1 2 -1 以及9 8 7 6 5 4 3 2 1 -1進行測試"<<endl;

                
            for(i=1;i<=4;i++)
                {
                    test.creat();
                    test.print();
                    test.reverse();
                    test.print();
                    test.initial();
                }
                cout
            <<endl;
                system(
            "pause");
                system(
            "cls");
                

                cout
            <<"經過以上測試,可以認為這個類是基本正確的,如果您在使用過程中遇到問題可以及時與我取得聯系,謝謝您的使用,再見!"<<endl;
                system(
            "pause");
                
            return 0;

            }








            posted on 2009-02-23 22:47 abilitytao 閱讀(1187) 評論(6)  編輯 收藏 引用

            評論

            # re: 張宏數據結構第二課——動態線性鏈表類(sqlist測試版) 歡迎大家測試 2009-02-24 00:37 陳梓瀚(vczh)

            用cout輸出錯誤無法接受,改之。  回復  更多評論   

            # re: 張宏數據結構第二課——動態線性鏈表類(sqlist測試版) 歡迎大家測試[未登錄] 2009-02-24 10:31 abilitytao

            @陳梓瀚(vczh)
            因為cout是帶緩沖輸出嗎?
            我是初學者,如果用printf的話,有什么區別呢?
              回復  更多評論   

            # re: 張宏數據結構第二課——動態線性鏈表類(sqlist測試版) 歡迎大家測試 2009-02-24 17:19 陳梓瀚(vczh)

            @abilitytao
            萬一他想把錯誤輸出到MessageBox的話,你那個做法豈不是完蛋了么。  回復  更多評論   

            # re: 張宏數據結構第二課——動態線性鏈表類(sqlist測試版) 歡迎大家測試[未登錄] 2009-02-24 17:45 abilitytao

            @陳梓瀚(vczh)
            我還是初學者 你說的MessageBox是不是MFC里面的東西呢?
            恕我冒昧 可否告訴我應該如何解決呢?
              回復  更多評論   

            # re: 張宏數據結構第二課——動態線性鏈表類(sqlist測試版) 歡迎大家測試 2009-02-24 20:50 空明流轉

            @abilitytao

            你這種設計風格是有問題的.

            如果有錯,你應該通過返回值或異常等語言內建的方式提供錯誤信息,

            使用什么樣的方式錯誤處理過程應該由調用方解決.  回復  更多評論   

            # re: 張宏數據結構第二課——動態線性鏈表類(sqlist測試版) 歡迎大家測試[未登錄] 2009-02-25 21:14 abilitytao

            @空明流轉
            在下初學 能否說得再具體一些呢?  回復  更多評論   

            超级碰碰碰碰97久久久久| 97精品国产97久久久久久免费| 久久久久久九九99精品| 久久综合精品国产二区无码| 99热成人精品热久久669| 丁香五月综合久久激情| 一本久久精品一区二区| 国产亚洲综合久久系列| 久久久久99精品成人片三人毛片| 怡红院日本一道日本久久 | 麻豆国内精品久久久久久| 久久影视综合亚洲| 国内精品伊人久久久久av一坑| 国产视频久久| 丰满少妇高潮惨叫久久久| 久久只这里是精品66| 99久久精品国内| 亚洲精品乱码久久久久久按摩| 久久综合丝袜日本网| 亚洲国产另类久久久精品| 一级做a爰片久久毛片人呢| 一本一本久久A久久综合精品 | 久久综合亚洲色HEZYO社区| 国产精品视频久久久| 天天躁日日躁狠狠久久| 亚洲精品综合久久| 国内精品久久久久久久久电影网| 久久影院综合精品| 久久国语露脸国产精品电影| 精品久久久久久久中文字幕| 99久久人妻无码精品系列 | 久久香蕉国产线看观看乱码| 亚洲va国产va天堂va久久| 久久久久久精品久久久久| 久久久久国产精品三级网| 久久精品无码专区免费| 99久久伊人精品综合观看| 99久久精品国产一区二区三区| 亚洲国产精品久久久久网站 | 久久精品国产乱子伦| 亚洲精品乱码久久久久久按摩 |