程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++數據結構--鏈表

C++數據結構--鏈表

編輯:C++入門知識

 

   用C++ 實現鏈表:

首先功能分析: 構造,清理,增刪改查,求大小 判斷空 ,取頭取尾

 

#include <iostream>

using namespace std;

 

typedef int T;

//鏈表類

class LinkedList

{

    struct Node

    {

        T data;

        Node* next;

        Node(const T& t):data(t),next(NULL)

        {

        }

    };

public:

    //構造  析構  清空

    LinkedList():head(NULL)

    {

    }

    

    ~LinedList()

    {

        clear();

    }

 

    void clear()

    {

    

    }

    //增(insertBack insertFront)刪改查(find)

    void insertFront(const T& t)

    {

    }

    void insertBack(const T& t)

    {

    }

    void erase(const T& t)

    {

    }

    void update(const T& t,const T& target)

    {

    }

    unsigned int  find(const T& t)

    {

        unsigned int position=0;

        return position;

    }

    //判斷empty 求size  遍歷(travel)

    bool empty()

    {

    }

    unsigned int size()

    {

        int size=0;

        return size;

    }

    

    void travel()

    {

    }

    //取頭 取尾  

    T getHead()

    {

    }

    T getTail()

    {

 

    }

    //去指定位置取指針  輔助作用

    Node* getPointer(int position)

    {

        return NULL;

    }

private:

    //頭指針 最重要的部分

    Node* head; 

};

 

int main()

{

}

功能添加:

 

#include <iostream>

using namespace std;

 

typedef int T;

//鏈表類

class LinkedList

{

    struct Node

    {

        T data;

        Node* next;

        //初始化data next 阻止垃圾數據

        Node(const T& t=T()):data(t),next(NULL)

        {

        }

    };

public:

    //構造  析構  清空

    LinkedList():head(NULL)

    {

    }

    ~LinkedList()

    {

        clear();

    }

 

    void clear()

    {

        Node *p=head;

        while (p!=NULL)

        {

            Node *q = p->next;

            delete p;//釋放p所在空間

            p=q;

        }

    }

    //判斷empty 求size  遍歷(travel)

    bool empty()

    {

        //判斷頭指針是否為空 為空表示鏈表不存在

        return head==NULL ? true : false;

    }

    unsigned int size()

    {

        unsigned int size=0;

        Node* p =head;

        while (p!=NULL)

        {

            size++;

            pp=p->next;

        }

        return size;

    }

 

    void travel()

    {

        //利用while循環一次次的輸出來,直到指針為NULL結束

        Node* p = head;

        while (p!=NULL)

        {

            cout<<p->data<<endl;

            pp=p->next;

        }

    }

    //增(insertAfter insertFront)刪改查(find)

    void insertFront(const T& t)

    {

        Node* p = new Node(t);

        p->next=head;  //講頭指針所指向的地址給p的next

        head = p;       //讓*p作為頭

    }

    void insertAfter(const T& t)

    {

        Node *p = new Node(t);

        Node *tail = getPointer(size()-1);

        tail->next = p;

    }

    void erase(const T& t)

    {

        unsigned int position = find(t);

        Node* cur = getPointer(position);

        if (position!=0)

        {

            Node* pre = getPointer(find(t)-1);

            pre->next = cur->next;

        }else{

            head = cur->next;

        }

        delete cur;

    }

    void update(const T& t,const T& target)

    {

        Node *p=getPointer(find(target));

        p->data=t;

    }

    unsigned int  find(const T& t)

    {

        unsigned int position=0;

        Node* p = head;

        while(p!=NULL)

        {

            if (p->data==t)

            {

                return position;

            }

            pp=p->next;

            position++;

        }

        return position;

    }

    

    //取頭 取尾  

    T getHead()

    {

        return head->data;

    }

    T getTail()

    {

        Node *p=getPointer(this->size()-1);

        return p->data;

    }

    //去指定位置取指針  輔助作用

    Node* getPointer(int position)

    {

        Node* p =head;

        for(int i = 0;i<position;i++)

        {

            pp=p->next;

        }

        return p;

    }

private:

    //頭指針 最重要的部分

    Node* head; 

};

 

int main()

{

}  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved