<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 195, comments - 34, trackbacks - 0, articles - 1

    CSingleList的類實現,可以豐富起來

    Posted on 2010-04-16 10:30 小強摩羯座 閱讀(192) 評論(0)  編輯  收藏 所屬分類: C++ &VC
      1
      2
      3// realize a SingleList class
      4/*
      5實現方法
      6add()
      7add2Head(dd);
      8del
      9lastN
     10length();
     11reverse();//實現單鏈表反轉
     12*/

     13#include<iostream>
     14#include<cassert>
     15#include<typeinfo>
     16
     17using namespace std;
     18
     19#define  DataType int
     20
     21class CSingleList
     22{
     23private:
     24    typedef struct Node
     25    {
     26        DataType data;
     27        Node * next;
     28    }
    ;
     29    Node* pHead;
     30
     31public:
     32    CSingleList()
     33    {
     34        pHead = NULL;
     35    }

     36    CSingleList& add(DataType data)
     37    {
     38        if ( pHead == NULL)
     39        {
     40            pHead = new Node;
     41            pHead->data = data;
     42        }

     43        else
     44        {
     45            Node* p = pHead;
     46            while (p->next != NULL )
     47            {
     48                p = p->next;
     49            }

     50            Node* q = new Node;
     51            q->data = data;
     52            q->next = NULL;
     53            p->next = q;
     54        }

     55        return *this;
     56    }

     57    CSingleList& add2Head(DataType data)
     58    {
     59        if ( pHead == NULL)
     60        {
     61            pHead = new Node;
     62            assert(pHead);
     63            pHead->data = data;
     64            pHead->next = NULL;
     65        }

     66        else
     67        {
     68            Node* q = new Node;
     69            assert(q);
     70            q->data = data;
     71            q->next = pHead;
     72            pHead = q;
     73        }

     74        return *this;
     75    }

     76    void print(const char* note=" ")
     77    {
     78        Node* p = pHead;
     79
     80        cout<<"---------- "<<note<<" ---------"<<endl;
     81        while (p != NULL && p->next!= NULL)
     82        {
     83            cout<<p->data<<"";
     84            p = p->next;
     85        }

     86        cout<<p->data<<endl;;
     87    }

     88    int length()
     89    {
     90        int n = 0;
     91        Node* p = pHead;
     92        while ( p != NULL)
     93        {
     94            n++;
     95            p = p->next;
     96        }

     97        return n;
     98    }

     99
    100    CSingleList& del(DataType data)
    101    {
    102        if ( pHead == NULL) return *this;
    103        //數據在在頭結點
    104        if (pHead->data == data)
    105        {
    106            delete pHead;
    107            pHead = NULL;
    108            return *this;
    109        }

    110        Node *p, *q;
    111        p = pHead;
    112        q = p->next;
    113        while ( q != NULL)
    114        {
    115            if (q -> data == data)
    116                break;
    117            p = q;
    118            q = q->next;
    119        }

    120        //point to the q's next
    121        p->next = q->next;
    122        delete q;
    123
    124        return *this;
    125    }

    126
    127    CSingleList& reverse()
    128    {
    129        Node *p1, *p2, *p3;
    130        //如果長度小于2不用反轉
    131        if ( pHead == NULL || pHead->next== NULL)
    132            return *this;
    133
    134        p1 = pHead;
    135        p2 = pHead->next;
    136        while (p2 != NULL)
    137        {
    138            p3 = p2->next;
    139            p2->next = p1;
    140            p1 = p2;
    141            p2 = p3;
    142        }

    143        pHead->next = NULL;
    144        pHead = p1;
    145        return *this;
    146    }

    147    //得到鏈表中的倒數第N個
    148    DataType getLastN(int lastN)
    149    {
    150        reverse();
    151        Node *= pHead;
    152        for (int i = 1; i < lastN;i++)
    153        {
    154            if (p == NULL) return -1;
    155            p = p->next;
    156        }

    157        reverse();
    158        if (p != NULL) return p->data;
    159        return -1;
    160    }

    161    //using 2 pointer to speed
    162    DataType getLastN2(int lastN)
    163    {
    164        Node *= pHead;
    165        for (int i = 1; i < lastN;i++)
    166        {
    167            if (p == NULL) return -1;
    168            p = p->next;
    169        }

    170
    171        if (p != NULL)
    172        {
    173            Node* q = pHead;
    174            while ( p->next != NULL)
    175            {
    176                q = q ->next;
    177                p = p ->next;
    178            }

    179            return q->data;
    180        }

    181        return -1;
    182    }

    183    //for singleList, /使用選擇排序吧
    184    CSingleList& selectSort()
    185    {
    186        if ( pHead == NULL) return *this;
    187        for ( Node* p = pHead;p != NULL;p = p->next)
    188        {   
    189            Node* minNode = p;
    190            for (Node* q = p->next;  q!= NULL; q = q->next)
    191            {
    192                if ( q ->data < minNode->data)
    193                {
    194                    minNode = q;
    195                }

    196            }

    197            cout<<"min = "<<minNode->data<<endl;
    198            swap( minNode->data, p->data);
    199        }

    200        return *this;
    201    }

    202    CSingleList& insertSort()
    203    {
    204        if( pHead == NULL) return *this;
    205        
    206        for(Node* p = pHead->next; p!= NULL;p = p->next)
    207        {
    208            if( p->data > pHead->data)// 
    209            {
    210                DataType tmp = pHead->data;
    211                for(Node *= pHead; q != p;q = q->next)
    212                {
    213                    
    214                }
     
    215            }
     
    216        }
     
    217    }
     
    218}
    ;
    219void swap(DataType& a, DataType& b)
    220{
    221    a = a + b - ( b = a);
    222}

    223
    224
    225int main()
    226{
    227    CSingleList myList1;
    228    myList1.add(3).add(5).add(34).add(24334).add2Head(88);
    229
    230    myList1.print();
    231
    232    cout<< myList1.length()<<endl;
    233
    234    myList1.del(5).del(34);
    235
    236    myList1.print();
    237
    238    myList1.reverse();
    239    myList1.print();
    240    myList1.add(233).add(256);
    241    myList1.print();
    242
    243    cout<<" last 2 :"<< myList1.getLastN2(2);
    244
    245
    246    myList1.selectSort();
    247    myList1.print("afte sort");
    248
    249    return 0;
    250}


    主站蜘蛛池模板: 中文字幕亚洲综合久久菠萝蜜 | 亚洲综合视频在线观看| 国产免费人成视频尤勿视频| 国产精品免费电影| 亚洲1区2区3区精华液| 免费人成在线观看网站品爱网日本| 亚洲日本一线产区和二线| 最近中文字幕无吗高清免费视频| 亚洲中文无码av永久| 无码日韩精品一区二区免费| 亚洲深深色噜噜狠狠网站| 在线观看人成网站深夜免费| 亚洲欧美成人综合久久久| 免费的一级片网站| 免费播放国产性色生活片| 亚洲人成网站色在线入口| 香蕉视频在线免费看| 亚洲成AV人在线观看天堂无码| 国产精品白浆在线观看免费| 久久久亚洲裙底偷窥综合| 在线观看特色大片免费视频| 亚洲熟妇成人精品一区| 一本色道久久88亚洲综合 | 亚洲AV无码一区二区三区在线观看| 成年免费a级毛片| 国产亚洲精品va在线| 亚洲成人免费网站| 亚洲色欲色欲www在线播放| 又粗又大又长又爽免费视频 | 亚洲电影唐人社一区二区| 在线播放高清国语自产拍免费| 亚洲av永久无码一区二区三区| 国产免费直播在线观看视频| 99re6在线精品免费观看| 亚洲国产精品乱码在线观看97| 浮力影院第一页小视频国产在线观看免费 | 午夜亚洲国产理论秋霞| 动漫黄网站免费永久在线观看| jizzjizz亚洲日本少妇| 亚洲国产精彩中文乱码AV| 99在线视频免费观看视频|