C++实现双链表

#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 ;
	}
}
时间: 2024-09-11 05:47:25

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

循环双链表初始化的问题

问题描述 循环双链表初始化的问题 s=(LinkList)malloc(sizeof(Node)); s->data=a[i]; s->next=L->next; if(L->next!=NULL) L->next->prior=s; L->next=s; s->prior=L; 在树上有对L->next的判空语句,但是我认为在循环链表中没有NULL节点,所以我想问问这样做是否多余? 解决方案 如果循环链表构建正确,确实没有必要判断. 但为了程序的健壮

数据结构(C#):双链表

双链表每个数据节点都有两个指针,分别指向其后继和前驱节点.与单链表只能访问其后继结点相比 ,具有更大的灵活性:当然占用更多的存储空间. 前面的单链表和这里的双链表都使用了空的头结点或称哑节点,目的是实现有序链表时更方便. 直接看代码: /* * File : DoubleLinkedList.cs * Author : Zhenxing Zhou * Date : 2008-12-06, 2008-12-07 * Blog : http://www.xianfen.net/ */ using S

单双链表:通过指针变动交换相邻元素

<数据结构与算法分析,C语言描述>表,栈和队列部分课后题: 单链表:P为待交换的第一个结点的前驱结点: pTemp = p->next; p-next = pTemp->next; pTemp->next = pTemp->next->next; p->next->next = pTemp; 双链表:P为待交换的第一个结点 p->last->next = p->next; p->next->last = p->las

PHP 双链表(SplDoublyLinkedList)简介和使用实例

  这篇文章主要介绍了PHP 双链表(SplDoublyLinkedList)简介和使用实例的相关资料,需要的朋友可以参考下 双链表是一种重要的线性存储结构,对于双链表中的每个节点,不仅仅存储自己的信息,还要保存前驱和后继节点的地址. PHP SPL中的SplDoublyLinkedList类提供了对双链表的操作. SplDoublyLinkedList类摘要如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

PHP 双链表(SplDoublyLinkedList)简介和使用实例_php实例

双链表是一种重要的线性存储结构,对于双链表中的每个节点,不仅仅存储自己的信息,还要保存前驱和后继节点的地址. PHP SPL中的SplDoublyLinkedList类提供了对双链表的操作. SplDoublyLinkedList类摘要如下: SplDoublyLinkedList implements Iterator , ArrayAccess , Countable { public __construct ( void ) public void add ( mixed $index ,

简单介绍线性表以及如何实现双链表_java

线性表是一种线性结构,它是具有相同类型的n(n≥0)个数据元素组成的有限序列. 一.数组数组有上界和下界,数组的元素在上下界内是连续的. 存储10,20,30,40,50的数组的示意图如下: 数组的特点:数据是连续的:随机访问速度快. 数组中稍微复杂一点的是多维数组和动态数组.对于C语言而言,多维数组本质上也是通过一维数组实现的.至于动态数组,是指数组的容量能动态增长的数组:对于C语言而言,若要提供动态数组,需要手动实现:而对于C++而言,STL提供了Vector:对于Java而言,Collec

视频-c#链表问题,包括最基础的单链表双链表以及循环链表的使用

问题描述 c#链表问题,包括最基础的单链表双链表以及循环链表的使用 新手,最近在学c#,请问有谁知道关于链表的视频,包括单链表,单循环链表,双循环链表等等,从链表最基础的开始讲的视频,里面介绍使用链表最基础的代码,谢了谢了!

双链表双链表怎么存储对象

问题描述 双链表双链表怎么存储对象 c++的问题,怎么把对象用链表存储起来,试了好多遍,把双链表的头文件的datatype定义为person为什么没有用 解决方案 建议楼主贴一下完整代码 解决方案二: 双链表都有一个next指针.prev指针和data数据存储区,也就是说data存储的就是你的person对象,所以你在创建链表的时候person应该是你链表的一个属性把 解决方案三: 双链表双链表

c++今天写双链表时链接错误LNK2001,代码如下(还未写完想测试一下结果没通过)

问题描述 c++今天写双链表时链接错误LNK2001,代码如下(还未写完想测试一下结果没通过) 发到贴吧上问了一次,回复较少,所以又来问一遍 代码在贴吧上http://tieba.baidu.com/f?ct=335675392&tn=baiduPostBrowser&sc=42728746794&z=2748059140#42728746794<!--

c++ delphi 回调函数-一个数据结构的题目,涉及Hash、双链表、回调函数等,求大神指教?

问题描述 一个数据结构的题目,涉及Hash.双链表.回调函数等,求大神指教? 数据结构相关的题目描述 typedef?struct?_FILE_NODE?{ _FILE_NODE?*Prev; _FILE_NODE?*Next; WCHAR?wzFileName[MAX_PATH]; DWORD?dwLowDateTimeLastWrite; }?FILE_NODE,?*LPFILENODE; 实现两个项目: 一.DLL 1.实现文件遍历的功能 2.导出接口中,可由用户指定遍历哪个文件夹 3.提