码迷,mamicode.com
首页 > 其他好文 > 详细

关于如何创建双向链表的解析

时间:2015-05-17 02:03:52      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:

链表由无数模块(struct)穿成一串组成,每个模块都有两个指针(双向链表),一个指向上一个模块,一个指向下一个模块,还有一些其他变量用来存储自己想要存储的内容。

嗯,话说作者前几天还想要写一个无限精确度的计算器呢,就想到用链表实现。

//这里每一位=一个模块

struct BIT

{

BIT* previousBit;//指向上一个结构体

int theBit;//这一位数是什么

BIT* nextBit;//指向下一个结构体

};

这样nextBit 指向一个BIT结构体,BIT结构体之下又有一个nextBit,就好像串糖葫芦一样,把无数位串联起来了,最后形成下面这样的情况:

技术分享

当然 ,“1”BIT 里面的 previousBit和“4”BIT 里面的 nextBit不能不管他们呀,于是经过改良,就成了这样:

技术分享

这样还有一个好处,就是当我们遍历链表的时候,一旦碰到NULL值之后,就知道这个链表已经结束了,不能再遍历下去了。这样我们就使用了 NULL 做我们的终止符

好,言归正传,做一个链表,我们首先应该实现这些功能:

  • 能够自由增减链表里的“模块”
  • 能够遍历链表检索信息
  • 能够完美清空我们的链表

当然,实现这些功能,则应该明确,我们必须知道以下数据:

  • 链表的第一个“模块”或者最后一个“模块”

            PS:要不我们怎么遍历。。。怎么找到我们的链表在哪?

根据以上总结,我们可以创建一个类解决这些问题:

class CBit

{

struct BIT

{

BIT* previousBit;//指向上一个结构体

int theBit;//这一位数是什么

BIT* nextBit;//指向下一个结构体

};

 

public:

CBit()

{m_first=0;…}

bool Create(…);

bool Insert(…);

private:

BIT* m_first;

BIT* m_last;

 

};

 

对~大致模版就是这样~~如果有兴趣大家可以试一试做出无限位数计算器试试。

我就不帮大家实现了啊~我是个懒人,如果大家想看实例代码的话请点击这里去找度娘求助哈。

接下来是重点:“插入”理论

如果我们想讲一个“模块”插入到2和3之间。。。。那么该怎么操作呢?

技术分享

First,我们new一个BIT,然后让它指向2和3:

技术分享

但是问题来了:“2”和“3”根本不买这个新出来的“N”的账,我们需要矫正一下

nBit->nextBit->previousBit = nBit;

nBit->previousBit->nextBit = nBit;

技术分享

恭喜你,到目前为止,你已经掌握了链表精髓。

但是请注意:小心“2”或着“3”是我们设置的终止符NULL!!!这样这行代码就会导致内存崩溃,直接退出程序:

nBit->nextBit->previousBit = nBit;

nBit->previousBit->nextBit = nBit;

我们最好加一句IF防止这憨货出点不正常的问题

if(nBit->nextBit)

     nBit->nextBit->previousBit = nBit;

if(nBit->previousBit)

     nBit->previousBit->nextBit = nBit;

OK,没什么好讲的了……

呜,现在天也不早了(1:45),睡了,安。

关于如何创建双向链表的解析

标签:

原文地址:http://www.cnblogs.com/xnzzj/p/4509034.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!