C++实现双链表

简介: #include using namespace std ;#define NR(x) (sizeof(x)/sizeof(x[0]))class node{ public : int number ; node *next ; ...
#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 ;
	}
}
目录
相关文章
|
5月前
|
C++
【链表】还不会用C++实现链表?一文教会你各种链表的实现
【链表】还不会用C++实现链表?一文教会你各种链表的实现
251 0
|
3月前
|
存储 C++
C++的list-map链表与映射表
```markdown C++ 中的`list`和`map`提供链表和映射表功能。`list`是双向链表,支持头尾插入删除(`push_front/push_back/pop_front/pop_back`),迭代器遍历及任意位置插入删除。`map`是键值对集合,自动按键排序,支持直接通过键来添加、修改和删除元素。两者均能使用范围for循环遍历,`map`的`count`函数用于统计键值出现次数。 ```
33 1
|
4月前
|
存储 C++
C++的list-map链表与映射表
这篇教程介绍了C++中`list`链表和`map`映射表的基本使用。`list`链表可通过`push_front()`、`push_back()`、`pop_front()`和`pop_back()`进行元素的添加和删除,使用迭代器遍历并支持在任意位置插入或删除元素。`map`是一个键值对的集合,元素自动按键值排序,可使用下标操作符或`insert()`函数插入元素,通过迭代器遍历并修改键值对,同时提供`count()`方法统计键值出现次数。教程中包含多个示例代码以帮助理解和学习。
42 2
|
5月前
|
算法 C++
c++算法学习笔记 (13) 链表
c++算法学习笔记 (13) 链表
|
4月前
|
C++ Python
UE C++ 链表
UE C++ 链表
|
4月前
|
C++ 容器
【C++进阶】深入STL之list:高效双向链表的使用技巧
【C++进阶】深入STL之list:高效双向链表的使用技巧
53 0
|
5月前
|
存储 缓存 C++
C++链表常用的函数编写(增查删改)内附完整程序
C++链表常用的函数编写(增查删改)内附完整程序
103 0
|
5月前
|
C语言 C++
【c++】用c++实现带头双向循环链表
【c++】用c++实现带头双向循环链表
|
5月前
|
存储 算法 C语言
【C/C++ 链表结构】探索链表迭代器:C++实现的深入分析与优化策略
【C/C++ 链表结构】探索链表迭代器:C++实现的深入分析与优化策略
128 0
|
5月前
|
存储 算法 程序员
深入理解 C++ 自定义链表中实现迭代器
深入理解 C++ 自定义链表中实现迭代器
86 0