c++雙鏈表類模板
#pragma once
#include <iostream>
#include <string>
using namespace std;
template<typename T> class DblList;
template<typename T> class DblNode {
T info;
DblNode<T> *llink, *rlink;
public:
DblNode(T data);
DblNode();
T Getinfo() { return info; }
friend class DblList<T>;
};
template<typename T> DblNode<T>::DblNode() {
llink = rlink = NULL;
}
template<typename T> DblNode<T>::DblNode(T data) {
info = data;
llink = rlink = NULL;
}
template<typename T> class DblList {
DblNode<T> *head, *current;
public:
DblList();
~DblList();
void Insert(const T &data);
DblNode<T> *Remove(DblNode<T> *p);
void Print();
int Length();
DblNode<T> *Find(T data);
void MakeEmpty();
};
template<typename T> DblList<T>::DblList() {
head = new DblNode<T>();
head->rlink = head->llink = head;
current = NULL;
}
template<typename T> DblList<T>::~DblList() {
MakeEmpty();
delete head;
}
template<typename T> void DblList<T>::MakeEmpty() {
DblNode<T> *tempP;
while (head->rlink != head) {
tempP = head->rlink;
head->rlink = tempP->rlink;
tempP->rlink->llink = head;
delete tempP;
}
current = NULL;
}
template<typename T> void DblList<T>::Insert(const T &data) {
current = new DblNode<T>(data);
current->rlink = head;
current->llink = head->llink;
head->llink->rlink = current;
head->llink = current;
}
template<typename T> DblNode<T> *DblList<T>::Remove(DblNode<T> *p) {
current = head->rlink;
while (current != head && current != p)
current = current->rlink;
if (current == head)
current = NULL;
else {
p->rlink->llink = p->llink;
p->llink->rlink = p->rlink;
p->llink = p->rlink = NULL;
}
return current;
}
template<typename T> DblNode<T> *DblList<T>::Find(T data) {
current = head->rlink;
while (current != head && current->info != data)
current = current->rlink;
if (current == head)
current = NULL;
return current;
}
template<typename T> void DblList<T>::Print() {
current = head->rlink;
while (current != head) {
cout << current->info << '\t';
current = current->rlink;
}
cout << endl;
}
template<typename T> int DblList<T>::Length() {
int count = 0;
current = head->rlink;
while (current != head) {
count++;
current = current->rlink;
}
return count;
}
相關推薦
c++雙鏈表類模板
#pragma once #include <iostream> #include <string> using namespace std; template<typename T> class DblList; template&
C++ 雙鏈表
一、什麼是雙鏈表 雙向連結串列也叫雙鏈表,是連結串列的一種,它的每個資料結點中都有兩個指標,分別指向直接後繼和直接前驅。所以,從雙向連結串列中的任意一個結點開始,都可以很方便地訪問它的前驅結點和後繼結點。一般我們都構造雙向迴圈連結串列。 二、雙鏈表的基本操作
列表的c++實現(類模板,包含順序實現和單鏈表、雙鏈表)
#ifndef LIST_H_INCLUDED #define LIST_H_INCLUDED #include <iostream> using namespace std; template <class elemType> class List{ public:
資料結構圖文解析之:陣列、單鏈表、雙鏈表介紹及C++模板實現
0. 資料結構圖文解析系列 1. 線性表簡介 線性表是一種線性結構,它是由零個或多個數據元素構成的有限序列。線性表的特徵是在一個序列中,除了頭尾元素,每個元素都有且只有一個直接前驅,有且只有一個直接後繼,而序列頭元素沒有直接前驅,序列尾元素沒有直接後繼。 資料結構中常見的線性結構有陣列、單鏈表、雙鏈表、迴圈
30.雙鏈表管理類的內存釋放
hello 表數據 back 共享 erase 釋放 post 顯示 聲明 1 #include <iostream> 2 #include <list> 3 #include <Windows.h> 4 using n
朱有鵬C語言高階---4.9.12--雙鏈表--刪除節點(雙鏈表的完整程式)(12)
朱有鵬C語言高階---4.9.12--雙鏈表--刪除節點(12) 刪除的過程就是一個遍歷的過程。 刪除尾節點 刪除普通節點 程式碼如下: #include <stdio.h> #inc
朱有鵬C語言高階---4.9.11--雙鏈表--遍歷節點(11)
朱有鵬C語言高階---4.9.11--雙鏈表--遍歷節點(11) 遍歷節點 (1)雙鏈表是單鏈表的一個父集。雙鏈表中如何完全無視pPrev指標,則雙鏈表就變成了單鏈表。這就決定了雙鏈表的正向遍歷(後向遍歷)和單鏈表是完全相同的。 (2)雙鏈表中因為多了pPrev指標,因
朱有鵬C語言高階---4.9.10--雙鏈表--頭插入和尾插入(10)
朱有鵬C語言高階---4.9.10--雙鏈表--頭插入和尾插入(10) 尾插入: 頭插入: 注意下面的程式碼中,insert_head()函式裡面語句的順序,第一語句和第二語句的順序可以互相調換,但是第一語句和第二語句要在
朱有鵬C語言高階---4.9.9--雙鏈表--引入和實現(9)
朱有鵬C語言高階---4.9.9--雙鏈表--引入和實現(9) 單鏈表的侷限性 (1)單鏈表是對陣列的一個擴充套件,解決了陣列的大小比較死板不容易擴充套件的問題。使用堆記憶體來儲存資料,將資料分散到各個節點之間,其各個節點在記憶體中可以不相連,節點之間通過指標進行單向連線。
C++資料結構雙鏈表
《資料結構》實驗二: 線性表綜合實驗 一.實驗目的 &nbs
C 實現雙鏈表
DoublyLinkedList.h #pragma once // 新建雙向連結串列。成功,返回0;否則,返回-1。 extern int DLink_Create(); // 連結串列大小 extern int DLink_Size(); //
資料結構之雙鏈表----增刪改查(C語言)
原始碼在部落格裡可下載,1C幣。或者找Q:128550014要程式碼 一、匯入標頭檔案 #include<stdlib.h> #include<stdio.h> 二、結構體的定義 //定義一個結構體,用於表示雙鏈表的一個節點 typed
C 語言例項11——雙鏈表刪除
/*雙鏈表的刪除 ** 把一個值插入到雙鏈表,rootp是一個指向根節點的指標 ** del 是指向欲移除節點的指標 ** 返回值: ** 如果連結串列不包含移除的節點,函式就返回假,否則返回真。 */ int dll_remove(Node *rootp, Node *de
C 語言例項10——雙鏈表插入
/*雙鏈表的插入 ** 把一個值插入到雙鏈表,rootp是一個指向根節點的指標 ** value 是欲插入的新值 ** 返回值:如果欲插入的值已存在連結串列中,函式返回0; ** 如果記憶體不足導致無法插入,函式返回-1;,如果插入成功,函式返回1; */ int dll_
資料結構——線性表:順序表、單鏈表、雙鏈表(C++)
內容概要: 1.程式碼部分: 線性表抽象類 順序表類 單鏈表類 雙鏈表類 主函式 2.基本概念及注意事項 程式碼(測試環境VS2017): //線性表ADT類的定義:ADT_List.h template <typena
陣列、單鏈表和雙鏈表介紹 以及 雙向連結串列的C/C++/Java實現
1 #include <stdio.h> 2 #include <malloc.h> 3 4 /** 5 * C 語言實現的雙向連結串列,能儲存任意資料。 6 * 7 * @author skywang 8 * @date 2
c/c++ 迴圈單鏈表變迴圈雙鏈表
最近遇到了一個作業題目是:建立一個迴圈連結串列,其節點有前置,資料和下一個三個域,其中資料為資料域,存放元素的有效資訊,下一個域為指標域,指向後繼節點,之前為指標域,它的值為NULL。編寫一個演算法將此表格改為迴圈雙鏈表。建立連結串列節點結構 連結串列節點在Ç語言建立的方法是
Java集合 List實現類 LinkedList (雙鏈表) 原始碼淺析
Java集合 List實現類 LinkedList 原始碼淺析 文章目錄 Java集合 List實現類 LinkedList 原始碼淺析 一 、簡述(來自JAVA api 註釋) 二、構造方法 三、List方法
C++ 雙向迴圈連結串列(簡稱:雙鏈表)
一、概念 1.在雙鏈表中的每個結點應有兩個連結指標: lLink -> 指向前驅結點&nb
C語言 有序雙鏈表實現插入、刪除、列印(正反)等簡單操作
1.雙鏈表與單鏈表的區別主要是在於雙鏈表中,每個節點都包含兩個指標——指向前一個節點的指標,和指向後一個節點的指標。這就便於我們從任何方向遍歷整個連結串列。 下面是節點型別的說明: typedef