• <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久久久久人妻精品专区| 久久99国产亚洲高清观看首页 | 久久婷婷五月综合成人D啪 | 久久久精品人妻一区二区三区蜜桃| 久久伊人精品一区二区三区| 精品国产乱码久久久久软件| 大美女久久久久久j久久| 久久一本综合| 久久超乳爆乳中文字幕| 久久久WWW免费人成精品| 国内精品久久久久影院优 | 亚洲精品美女久久久久99小说| 久久久无码一区二区三区| 国产精品无码久久四虎| 久久久久久无码Av成人影院| 久久久久久无码国产精品中文字幕 | 婷婷伊人久久大香线蕉AV| 久久精品成人欧美大片| 国产精品久久午夜夜伦鲁鲁| 国产免费久久精品99re丫y| 国产免费久久久久久无码| 99国产精品久久久久久久成人热| 亚洲性久久久影院| 久久精品亚洲乱码伦伦中文| 久久人人爽人人爽人人片av高请| 午夜福利91久久福利| 99久久精品免费看国产一区二区三区 | 久久婷婷五月综合97色一本一本| 青青久久精品国产免费看| 精品久久久久久久久久久久久久久| 国内精品九九久久久精品| 色88久久久久高潮综合影院 | 久久一区二区免费播放| 91久久精品国产成人久久| 亚洲国产成人久久综合碰碰动漫3d| 久久99精品久久久久久hb无码 | 久久精品国产亚洲av高清漫画| 人妻无码αv中文字幕久久琪琪布| 囯产极品美女高潮无套久久久 |