数据结构 - 双链表(C++)

// ------DoublyLinkedList.h------

template <class T>
class DNode
{
private:
	// 指向左、右结点的指针
	DNode<T> * left;
	DNode<T> * right;
public:
	// data为公有成员
	T data;
	// 构造函数
	DNode(void);
	DNode(const T& item);
	// 改变表的方法
	void InsertRight(DNode<T> * p);
	void InsertLeft(DNode<T> * p);
	DNode<T> * DeleteNode(void);
	// 取得指向左、右结点的指针
	DNode<T> * NextNodeRight(void) const;
	DNode<T> * NextNodeLeft(void) const;
};
// ------DoublyLinkedList.cpp------

#include "DoublyLinkedList.h"

// 构造函数,创建一个空表,并初始化其data域
template <class T>
DNode<T>::DNode(const T& item)
{
	// 建立一个指向自身的结点并初始化data域
	left = right = this;
	data = item;
}

// 将结点p插入到双向链表中当前结点右边
template <class T>
void DNode<T>::InsertRight(DNode<T> * p)
{
	// 将p和当前结点的右后继结点相连
	p->right = right;
	right->left = p;
	// 将p的左边和当前结点相连
	p->left = this;
	right = p;
}

// 将结点p插入到当前结点左边
template<class T>
void DNode<T>::InsertLeft(DNode<T> * p)
{
	// 将p和当前结点的左后继结点相连
	p->left = left;
	left->right = p;
	// 将p的右边与当前结点相连
	p->right = this;
	left = p;
}

// 从链表中删除当前结点并返回其地址
template <class T>
DNode<T> * DNode<T>::DeleteNode(void)
{
	// 将左结点的右指针指向右结点
	left->right = right;
	// 将右结点的左指针指向左结点
	right->left = left;
	// 返回当前节点指针
	return this;
}

版权声明:本文博主原创文章。博客,未经同意不得转载。

时间: 2024-10-22 17:00:01

数据结构 - 双链表(C++)的相关文章

redis源码分析(3)-- 基本数据结构双链表list

一.双链表结构 redis中实现的双链表结构体如下: 1 typedef struct list { 2 listNode *head; # 链表头 3 listNode *tail; # 链表尾 4 void *(*dup)(void *ptr); # 复制链表函数 5 void (*free)(void *ptr); # 释放节点函数 6 int (*match)(void *ptr, void *key); # 匹配函数 7 unsigned long len; # 链表节点个数 8 }

[数据结构]双链表

[cpp] view plaincopy typedef struct NODE{ struct NODE *fwd; struct NODE *bwd; int value; }Node; 双链表的根节点的bwd指针指向双链表的最后一个节点,fwd指针指向双链表的第一个节点,双链表的value字段为空 以下程序是将一个值插入到一个有序的双链表中,如果链表中已经有和该值相同的节点则不插入 [cpp] view plaincopy #include <stdio.h> #include <

数据结构——双链表

双链表的操作 利用链表的尾插法建立双链表: 1 void CreateDlistR(DLNode *&L,int a[],int n){ 2 DLNode *s,*r; 3 int i; 4 L = (DLNode *)malloc(sizeof(DLNode)); 5 L -> prior = NULL; 6 L -> next = NULL; //空的双向链表 7 r = L; //r指向L的头结点也是尾结点 8 for(i = 0;i < n;i++){ 9 s = (DL

数据结构--双链表的创建和操作

双向链表的定义 双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱.所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点.一般我们都构造双向循环链表. 注意:在实现的过程中,要分清前驱指针和后继指针,不要把他们当成一个指针. 1 //双向链表的实现 2 template<typename T>struct node{ 3 T data; 4 node<T> *prior,*next; 5 }; 双向链表的实现 1

C++ 数据结构 双链表(模板类)

#ifndef DLIST_H_INCLUDED #define DLIST_H_INCLUDED #include<iostream> using namespace std; template<class Type> class DList; template<class Type> class ListNode { friend class DList<Type>; public: ListNode():data(Type()),next(NULL),

java数据结构与算法之改良顺序表与双链表类似ArrayList和LinkedList(带Iterator迭代器与fast-fail机制)

转载请注明出处(请尊重原创!谢谢~): http://blog.csdn.net/javazejian/article/details/53073995 出自[zejian的博客] 关联文章: java数据结构与算法之顺序表与链表设计与实现分析 java数据结构与算法之双链表设计与实现 java数据结构与算法之改良顺序表与双链表类似ArrayList和LinkedList(带Iterator迭代器与fast-fail机制) ??这篇是数据结构与算法的第3篇,通过前两篇的介绍,对应顺序表和链表已有

java数据结构与算法之双链表设计与实现

转载请注明出处(万分感谢!): http://blog.csdn.net/javazejian/article/details/53047590 出自[zejian的博客] 关联文章: 关联文章: java数据结构与算法之顺序表与链表设计与实现分析 java数据结构与算法之双链表设计与实现 java数据结构与算法之改良顺序表与双链表类似ArrayList和LinkedList(带Iterator迭代器与fast-fail机制) ??上一篇文章分析顺序表和单链表,本篇就接着上篇继续聊链表,在单链表

数据结构之自建算法库——循环双链表

本文针对数据结构基础系列网络课程(2):线性表中第13课时循环链表. 按照"0207将算法变程序"[视频]部分建议的方法,建设自己的专业基础设施算法库. 双链表算法库算法库采用程序的多文件组织形式,包括两个文件: 1.头文件:cdlinklist.h,包含定义双链表数据结构的代码.宏定义.要实现算法的函数的声明: #ifndef CDLINKLIST_H_INCLUDED #define CDLINKLIST_H_INCLUDED //循环双链表基本运算函数 typedef int E

数据结构之自建算法库——双链表

本文针对数据结构基础系列网络课程(2):线性表中第12课时双链表. 按照"0207将算法变程序"[视频]部分建议的方法,建设自己的专业基础设施算法库. 双链表算法库算法库采用程序的多文件组织形式,包括两个文件: 1.头文件:dlinklist.h,包含定义双链表数据结构的代码.宏定义.要实现算法的函数的声明: #ifndef DLINKLIST_H_INCLUDED #define DLINKLIST_H_INCLUDED typedef int ElemType; typedef s