多语言展示
当前在线:1344今日阅读:155今日分享:35

C++双向循环链表实现详解

这里使用较为简洁的语言,让你理解 双向循环链表的实现,用大白话 透彻的剖析 这种结构的实现。让大家能够像对待艺术一样,去对待书写代码。爱上编程,爱上Coding!
工具/原料

VC++6.0

方法/步骤
1

创建工程 - 控制台程序 ; 创建文件-CPP文件-添加到工程中。如下截图。创建控制台程序的目的是 是单纯的写程序,程序这东西,说白了是看不到摸不着的,是逻辑的实体,对于我们的 数据结构类型 (双向循环链表也是)的问题,控制台程序足够了。这里直接添加CPP文件,也是为了方便。没有用.h文件,应为我们是为了写好 “双向循环链表”,对于细节的问题,大家可以去进一步询问度娘。

2

万事俱备,只欠东风。到了我们真正写点东西的时候了——代码。首先,我们得把C++中的应该导入的标准输入输出文件头导入弄了半天了,下面才是我们应该写的主体部分。拿一个普通的链表来说,都是由一个个结点构成的,多个结点穿在一起就形成了链表。就像冰糖葫芦一样。山楂就是结点。好下面struct Node 就是一个山楂的结构体。这里定义了data 是int类型,就是代表当前节点的数据(此处只是为了表示的方便而已),还有 pre 和 next 是指向前面和后面的结点的指针。

3

结点说完了,下面我们要组装双向循环链表这个“糖葫芦”了,下面定义了DList类是双向循环链表类。定义了两个不同的构造函数。第一个是无参数的构造函数。第二个是使用一个数组,以及数组长度的两个参数的构造函数。第一个构造函数方法体是空的,那就不用说了,第二个构造函数方法体是将每个数据 “从链表的尾部插入”的过程。也很好理解。注意这里是使用了代头结点的,即第一个结点是没有用的,只是占位,操作方便。整个类写的十分简单。就是 顺序打印,逆序打印,添加元素main函数是测试代码,十分简单

4

测试运行结构如下,贴上整个代码,仅供参考#include using namespace std ; //双向循环链表结点struct Node{    int data ;    Node * pre ;    Node * next ;    Node():data(0),pre(NULL),next(NULL){} //构造函数1,初始化数据    Node(int d):data(d),pre(NULL),next(NULL){} //构造函数2,初始化数据};//带头结点的双向链循环表类class DList{public :    Node * head; //头结点    DList(){        head = new Node(0);         head->pre = head ;         head->next = head ;    }    DList(int ds [],int n){ //用数组初始化链表        head = new Node(0); //生成头结点        head->pre = head ;         head->next = head ;        for(int i = 0 ; i < n ; i ++ ){            Node * p = new Node(ds[i]) ; //新节点            p->pre = head->pre ;         //这4步是插入过程。            p->next = head ;            head->pre ->next = p ;             head->pre = p ;        }    }    ~DList(){                        //析构函数        Node * p = head->next ;        Node * q = NULL;        while(p!= head){            q = p ;            p=p->next ;            delete q ;        }        delete head ;    }    void PrintDList1(){                //正向输出链表        Node * p = head->next ;        while(p!= head){            cout<data<<' ' ;            p=p->next ;        }    }    void PrintDList2(){                //逆向输出链表        Node * p = head->pre ;        while(p!= head){            cout<data<<' ' ;            p=p->pre ;        }    }    void Add(int data){                //添加一个结点        Node * p = new Node(data) ;        p->next = head ;        p->pre = head->pre ;        head->pre->next = p ;         head->pre = p ;    }    };int main(){                            //测试    int ds[] = {1,2,3,4,5,6,7,8,9,10} ;    DList dlist(ds,10) ;    dlist.PrintDList1() ;    cout<

注意事项
1

先编译,在连接,后运行

2

VC++6.0不稳定,经常罢工,罢工后使用任务管理器勾掉他,然后重启

推荐信息