#include <iostream>
using namespace std ;
#define  NR(x)    (sizeof(x)/sizeof(x[0]))

class node
{
   public :
        int number ;
        node *next ;
        node *prev ;
        void Init_header(node **header);
        void traver_links(node *header);
        void top_append_links(node **header , int value);
        void tail_append_links(node **header , int value);
        int  delete_links(node **header , int value);
};

int main(void)
{
	int array[] = {1,2,3,4,5,6,7,8,9};

	node *header = NULL ;
    node list ;
	list.Init_header(&header);

	int i ;
	for(i = 0 ; i < NR(array) ; i++)
	{
     //   list.top_append_links(&header ,array[i]) ;
		list.tail_append_links(&header , array[i]);
	}

	list.traver_links(header);
	int num ;
	cout << "Pls input a number to delete:" << endl ;
	cin >> num ;
	list.delete_links(&header , num);
	list.traver_links(header);
	system("pause");
	return 0 ;
}

void node::Init_header(node **header)
{
	*header = new node[10] ;
	if(NULL == header)
	   return ;
	(*header)->next = *header ;
	(*header)->prev = *header ;
}

void node::top_append_links(node **header , int value)
{
	node *New = NULL ;
	New = new node[10] ;
	if(NULL == New)
	   return ;
	New->number = value ;
	New->next = (*header)->next ;
	(*header)->next = New ;
	New->prev = *header ;
	New->next->prev = New ;
}

void node::traver_links(node *header)
{
	node *tmp;
	for(tmp = header->next ; tmp != header ; tmp = tmp->next  )
	{
		cout<<' '<< tmp->number ;
	}
	cout << endl ;
}

void node::tail_append_links(node **header , int value)
{
	node *New = NULL ;
	New = new node[10] ;
	if(NULL == New)
	   return ;
	New->number = value ;
	New->prev =(*header)->prev ;
	(*header)->prev = New ;
	New->next = *header ;
	New->prev->next = New ;
}

int  node::delete_links(node **header , int value)
{
    node *tmp;
	node *fr ;
	for(tmp = (*header)->next ; tmp != *header ;  )
	{
		if(tmp->number == value)
		{
			fr = tmp->next;
			tmp->prev->next = tmp->next ;
			tmp->next->prev = tmp->prev ;
			delete tmp ;
			tmp = fr ;
			continue ;
		}
		tmp = tmp->next ;
	}
}

C++实现双链表的更多相关文章

  1. JAVA 链表操作:单链表和双链表

    主要讲述几点: 一.链表的简介 二.链表实现原理和必要性 三.单链表示例 四.双链表示例 一.链表的简介 链表是一种比较常用的数据结构,链表虽然保存比较复杂,但是在查询时候比较便捷,在多种计算机语言都 ...

  2. java实现双链表(差点没写吐系列...)

    刚才把单链表写完了,现在又把双链表写了,双链表和单链表的区别就是每个节点有prior和next两个指针,不同于单链表的一个next指针,而且,正是因为有这两个指针,所以双链表可以前后两个方向去移动指针 ...

  3. 数据结构图文解析之:数组、单链表、双链表介绍及C++模板实现

    0. 数据结构图文解析系列 数据结构系列文章 数据结构图文解析之:数组.单链表.双链表介绍及C++模板实现 数据结构图文解析之:栈的简介及C++模板实现 数据结构图文解析之:队列详解与C++模板实现 ...

  4. C和指针 第十二章 使用结构和指针 双链表和语句提炼

    双链表中每个节点包含指向当前和之后节点的指针,插入节点到双链表中需要考虑四种情况: 1.插入到链表头部 2.插入到链表尾部 3.插入到空链表中 4.插入到链表内部 #include <stdio ...

  5. [C++11][数据结构]自己的双链表实现

    这个双链表,是我模仿stl的list制作的,只实现了一些基本功能,像merge,transfer这些就没有实现,用户可以用基本操作来自己做外部实现. 我没有选用stl的[begin,end)迭代器模式 ...

  6. C#双链表

    单链表允许从一个结点直接访问它的后继结点,所以, 找直接后继结点的时间复杂度是 O(1).但是,要找某个结点的直接前驱结点,只能从表的头引用开始遍历各结点.如果某个结点的 Next 等于该结点,那么, ...

  7. Linux 底下使用C语言的 单链表 ,双链表,二叉树 读取文件,并排序

    直接上代码 单链表Linux读文件排序: 双链表Linux读取文件排序: 二叉树LinuX读取文件并排序:

  8. 再谈LRU双链表内存管理

    N年前我写了个双链表也发了博客,还添了代码.但是那个代码不但复杂,而且还有有问题的,一直懒得整理,放在空间误导别人.最近在写服务端,今天抽点空补一篇. 关于LRU网上随便搜,有过后端经验的人应该很多都 ...

  9. 数组、单链表和双链表介绍 以及 双向链表的C/C++/Java实现

    概要 线性表是一种线性结构,它是具有相同类型的n(n≥0)个数据元素组成的有限序列.本章先介绍线性表的几个基本组成部分:数组.单向链表.双向链表:随后给出双向链表的C.C++和Java三种语言的实现. ...

  10. C++ 双链表基本操作

    上一篇博客主要总结了单向链表,这次再总结一下双向链表. 1.概念 双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱.所以,从双向链表中的任意一个结点开始,都 ...

随机推荐

  1. EBS应收(AR)模块常用表

     select * from ar_batches_all 事务处理批 select * from ra_customer_trx_all INVOICE头 select * from ra_cu ...

  2. 2.QLabel,QPushButton,QLineEdit,QComboBox,QCheckBox,QRadioButton,QTextEdit,QTextBrowser,QGroupBox,QSl

     1.新建一个空项目(其它项目->空QT项目): 2  添加新文件(选择C++Class) MyWidget.h #ifndef MYWIDGET_H #define MYWIDGET_H ...

  3. 百度地图隐藏缩放控件比例尺Logo

    对于百度地图最新版V3.7.3,以前的隐藏控件方法失效,可用以下方法隐藏: 1.隐藏缩放控件: mMapView.showZoomControls(false); 2.隐藏比例尺: mMapView. ...

  4. shell入门之变量测试

    格式:test 测试条件 字符串测试: 注意空格: test str1 == str2 测试字符串是否相等 test str1 != str2 测试字符串是否不相等 test str1 测试字符串是否 ...

  5. UNIX网络编程——UDP编程模型

    使用UDP编写的一些常见得应用程序有:DNS(域名系统),NFS(网络文件系统)和SNMP(简单网络管理协议). 客户不与服务器建立连接,而是只管使用sendto函数给服务器发送数据报,其中必须指定目 ...

  6. 初探linux子系统集之i2c子系统(二)

    大概也是前年了,一直没有把那个i2c的子系统讲解完,这里偷个懒,把以前整理的i2c相关的知识再梳理一下,做个了结,然后再去学习timer子系统. 先看下i2c在内核中的代码分布: obj-$(CONF ...

  7. 解读“Deep Neural Decision Forests” 2015 Winner of the David Marr Prize

    2015ICCV会议最佳论文奖,即有着"计算机视觉界最高奖"之称的马尔奖(Marr Prize)授予了由微软剑桥研究院(Microsoft Research, Cambridge  ...

  8. UE4 射线拾取&三维画线

    虽然有人建议UE4使用C++创建VR项目,能避免一些坑爹的错误,但是我用C++创建,竟然问题更多,还存在创建不了的情况,也不知道是不是我的操作问题,快疯了. 于是我还是选择了蓝图创建VR项目,但是.. ...

  9. SimpleDateFormat用法大全及易错分析

    SimpleDateFormat 使用java语言处理日期相关操作,就不可避免的会使用到SimpleDateFormat.当然了,目前我们采用较多的是Calendar类,通过对之求相关的属性值即可得到 ...

  10. iOS数据解析UI_14

    数据解析:就是按照约定(假象)好的格式提取数据的过程就叫解析:  提供数据方(后台):工作就是把数据按照一定的格式存储起来  提取数据方(前台):工作就是把数据按照一定的格式读取出来  主流的格式:X ...