1. 程式人生 > >C++資料結構與STL--雙向迴圈連結串列(實現自定義iterator類)

C++資料結構與STL--雙向迴圈連結串列(實現自定義iterator類)

class dLinkList
{
private:
node<T> *head;  
//頭節點
size_t length; //連結串列長度
void dInsert(node<T> *curr,T val)  //插入的輔助函式,把新節點插入curr前 
{
node<T>* tem=new node<T>(val);
node<T>* preNode=curr->pre;
preNode->next=tem;
tem->pre=preNode;
tem->next=curr;
curr->pre=tem; 


void dDelete(node<T> *curr)
//刪除的輔助函式,刪除curr節點 
{
node<T> *preNode=curr->pre;
preNode->next=curr->next;
curr->next->pre=preNode;
delete curr; 
}
public:
   #include"my_iterator.h"     //使迭代器成為內部類

dLinkList():length(0) //初始化連結串列
{
head=new node<T>;
head->next=head;
head->pre=head;
}


void push_back(T val) //尾插法
{

dInsert(head,val);

length++;


void push_front(T val)  //前插法
{

dInsert(head->next,val);
length++;




my_iterator begin()  //返回第一個節點(頭節點的下一個節點)的迭代器 
{
return my_iterator(head->next);
}

my_iterator end()
{
return my_iterator(head);//返回尾節點的下一個節點(頭結點)迭代器
}

void insert(my_iterator it,T val)//在迭代器it的位置插入一節點
{

相關推薦

C++資料結構STL--雙向迴圈連結串列實現定義iterator

class dLinkList {private:node<T> *head;  //頭節點size_t length; //連結串列長度void dInsert(node<T> *curr,T val)  //插入的輔助函式,把新節點插入curr前 {node<T>* t

python資料結構演算法-單向迴圈連結串列

單向迴圈列表與單鏈表的區別是:讓原有單鏈表的尾節點的指標區指向頭結點 單向迴圈連結串列的初始構造:   class SingleLinkList(object): #單向迴圈連結串列 def __init__(self,node=None)

資料結構演算法-----單向線性連結串列逆轉和反向列印

單向連結串列沒有前指標,所以實現反向列印還是比較麻煩,我們這裡使用遞迴原理解決此問題。 這裡提到逆轉,也就是將單鏈表的next指標指向前一個節點,我們也使用遞迴實現。 // 練習:實現單向線性連

C++ 雙向迴圈連結串列簡稱:雙鏈表

一、概念     1.在雙鏈表中的每個結點應有兩個連結指標:               lLink -> 指向前驅結點&nb

雙向迴圈連結串列建立·插入·刪除·遍歷

author:chen ming dong #include<stdio.h> #include<stdlib.h> typedef struct list { int a; struct list *next;

資料結構開發(9):迴圈連結串列雙向連結串列

0.目錄 1.迴圈連結串列的實現 2.雙向連結串列的實現 3.小結 1.迴圈連結串列的實現 什麼是迴圈連結串列? 概念上 任意資料元素都有一個前驅和一個後繼 所有的資料元素的關係構成一個邏輯上的環 實現上 迴圈連結串列是一種特殊的單鏈表

資料結構開發(11):雙向迴圈連結串列實現

0.目錄 1.雙向迴圈連結串列的實現 2.小結 1.雙向迴圈連結串列的實現 本節目標: 使用 Linux 核心連結串列實現 StLib 中的雙向迴圈連結串列 template <typename T> class DualCircleList; StLib 中雙向迴圈

資料結構演算法》之連結串列雙向連結串列

雙向連結串列也叫雙鏈表,是連結串列的一種,它的每個資料結點中都有兩個指標,分別指向直接後繼和直接前驅。所以,從雙向連結串列中的任意一個結點開始,都可以很方便地訪問它的前驅結點和後繼結點。 雙向連結串列構造程式碼如下: public class DoubleLinkedLi

C++資料結構STL--棧的應用--中綴表示式轉字尾表示式

#ifndef in_post_convert_H #define in_post_convert_H #include<string> #include<stack> #include"op_priority.h"  using std::string;  using std::st

C++資料結構STL--有序表,刪除表重複項

template<typename T>//假設容器為listvoid uniq(list<T>& lst) {  auto beg=lst.begin();  auto end=lst.end();  T currVal; //記錄當前表資料值 while(beg!=end)

C++資料結構STL--選擇排序

  *外部迴圈對錶進行n-1次遍歷。pass控制變數的範圍0-n-2   *對於每次重複過程,都有一個內部迴圈掃描arr[pass]到arr[n-1]的無序子表,並判定最小元素的下標。   *只有最小元素的下標(smallIndex)不等於pass,才交換arr[pass]和arr[smallIndex];

資料結構演算法》之連結串列—有序連結串列

2、有序連結串列 有序連結串列是在單鏈表的基礎上對單鏈表的表頭節點插入進行修改,從表頭開始根據插入值與連結串列中原先存在的資料節點進行比較判斷,若大於(或小於)該節點就向後移一個節點進行比較,直至不大於(或小於)該節點,最終實現按照從小到大(或從大到小)的順序排列連結串列。 // 插入節點,

資料結構演算法》之連結串列—雙端連結串列

2、雙端連結串列 雙端連結串列就是在單鏈表的基礎上增加一個尾節點,使連結串列既有頭節點又有尾節點,這樣方便進行連結串列尾的訪問和刪除。其計算複雜度如下:1、在表頭插入一個新的節點,時間複雜度O(1) ;2、在表尾插入一個新的節點,時間複雜度O(1) ;3、刪除表頭的節點,時間複雜度O(1) ;4

資料結構演算法》之連結串列—單向連結串列

連結串列(LinkedList) 連結串列是一種物理儲存單元上非連續、非順序的儲存結構,資料元素的邏輯順序是通過連結串列中的指標連結次序實現的。連結串列由一系列節點(連結串列中每一個元素稱為節點)組成,節點可以在執行時動態生成。每個節點包括兩個部分:一個是儲存資料元素的資料域,另一個是儲存下一個

java版資料結構演算法—雙端連結串列

/** * 雙端連結串列 */ class MyLinkList { public Link first; public Link last; public MyLinkList(){ first = null; last = nu

資料結構自學記錄(四):迴圈連結串列 武大李春葆

迴圈連結串列是另一種形式的鏈式儲存結構形式: 迴圈單鏈表:將表中尾節點的指標域改為指向表頭節點,整個連結串列形成一個環。由 此從表中任一節點出發均可找到連結串列中其他節點。節點型別與普通單鏈表節點型別相同. 迴圈雙鏈表:...形成兩個環。節點型別與普通雙鏈表節點型別相同.

資料結構演算法分析 - 1 - 連結串列ADT

1.描述:不連續儲存的表,可以把連結串列看成一個數組,陣列元素是一個個結構體,這些結構體之間通過指標連線     2.優點:   利用不連續的儲存空間,提高記憶體使用效率   避免刪除和插入的線性開銷    對比陣列,大小不固定,可以擴充套件      3. 缺點

資料結構演算法04-單迴圈連結串列

迴圈連結串列 將單鏈表中終端結點的指標端由空指標改為指向頭結點,就使整個單鏈表形成一個環,這種頭尾相接的單鏈表稱為單迴圈連結串列,簡稱迴圈連結串列(circular linked list) 它解決了一個很麻煩的問題:如何從當中一個結點出發,訪問到連結串列的全部結點。 為

雙向迴圈連結串列c++)

#include<iostream> using namespace std; struct ListNode { ListNode() :_data(0) ,_prev(0) , _next(0) {} ListNode( c

C++——實現雙向迴圈連結串列帶頭結點

雙向連結串列也叫雙鏈表,是連結串列的一種,它的每個資料結點中都有兩個指標,分別指向直接後繼和直接前驅。所以,從雙向連結串列中的任意一個結點開始,都可以很方便地訪問它的前驅結點和後繼結點。一般我們都構造雙向迴圈連結串列。 簡單的畫一個雙向迴圈簡易圖: 下面就用C++實現一下基本操