#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应付(AP)模块常用表

     select * from ap_invoices_all INVOICE头 select * from ap_invoice_distributions_all INVOICE行 select ...

  2. cocos2d-x 3.11 游戏开发环境搭建流程

    cocos2d-x 3.11.1 游戏开发环境搭建流程 1. 准备下面的软件 1) Windows7 64Bit+ VS2013 (VC++) 这个不用多说. 2) cocos2d-x-3.11.1. ...

  3. javascript之事件处理

    一般事件 onclick                       鼠标点击时触发此事件 ondblclick                  鼠标双击时触发此事件 onmousedown    ...

  4. Android开发学习之路--RxAndroid之简单原理

      学习了RxAndroid,其实也就是RxJava了,但是还是不是非常清楚到底RxAndroid有什么用呢?为什么要使用RxAndroid呢?这篇文章讲得不错,RxJava的原理.但是这里还是把整个 ...

  5. API创建/更新员工薪水

    DECLARE lb_inv_next_sal_date_warning BOOLEAN; lb_proposed_salary_warning BOOLEAN; lb_approved_warnin ...

  6. 6. React 表单使用介绍

            表单是前端页面中非常重要也是非常常用的一个内容,react 也在表单方面进行了很多封装,让开发者可以方便快捷地在 react 组件中使用表单.下面介绍如何在组件中正确的使用表单,从而可 ...

  7. Shell脚本编程入门(一)

    最近在学shell,记录一下. if语句的使用: 1.判断两个参数大小 #!/bin/sh #a test about if statement a=10 b=20 if [ $a -eq $b ]; ...

  8. EBS密码加密研究

     DECLARE   v_password_1 VARCHAR2(240);   v_password_2 VARCHAR2(240);   v_password_3 VARCHAR2(240); ...

  9. 如何设制 select 不可编辑 只读

    1. <select style="width:195px" name="role"  id="role" onfocus=" ...

  10. 【unix网络编程第三版】阅读笔记(三):基本套接字编程

    unp第三章主要介绍了基本套接字编程函数.主要有:socket(),bind(),connect(),accept(),listen()等. 本博文也直接进入正题,对这几个函数进行剖析和讲解. 1. ...