資料結構 筆記 雙向鍊錶的實現

2021-08-29 15:46:13 字數 1825 閱讀 2916

單鏈表的另乙個缺陷

-單向性

·只能從頭結點開始高效訪問鍊錶中的資料元素

-缺陷·如果需要逆向訪問單鏈表中的資料元素將極其低效

雙向的線性表

-在「單鏈表」的結點中增加乙個指標pre,用於指向當前結點的前驅結點

雙向鍊錶的繼承層次結構

duallinklist的定義

templateclass duallinklist : public list;

mutable

// struct

node

m_header;

node* position(int i) const

return ret;

}virtual node* create()

virtual void destroy(node* pn)

int m_step;

node* m_current;

int m_length;

public:

duallinklist()

virtual bool insert(const t& e)

virtual bool insert(int i,const t& e)

else

if(next != null)

//qdebug() << 5;

m_length++;

}else

}return ret;

}virtual bool remove(int i)

current->next = next;

if(next != null)

m_length--;

destroy(todel);

}return ret;

}virtual bool set(int i,const t& e)

return ret;

}virtual t get(int i) const

else

}virtual bool get(int i, t& e) const

return ret;

}virtual int length() const

int find (const t& e) const

else

}return ret;

}virtual void clear()

m_length = 0;

}virtual bool move(int i,int step = 1)

return ret;

}virtual bool end()

virtual t current()

else

}virtual bool next()

return (i == m_step);

}virtual bool pre()

return (i == m_step);

}~duallinklist()

};

總結:

-雙向鍊錶是為了彌補單鏈表的缺陷而重新設計的

-再概念上,雙向鍊錶不是單鏈表,沒有繼承關係

-雙向鍊錶中的游標能夠直接訪問當前結點的前驅和後繼

-雙向鍊錶是線性表概念的最終實現(更貼近理論上的線性表)

資料結構 雙向鍊錶的實現

帶頭結點,不帶頭結點的類似 include include define elemtype int typedef struct dnodednode,dlinklist 雙向鍊錶的初始化 bool initdlinklist dlinklist l 雙鏈表 查詢指定idx位置的結點 dnode g...

資料結構 鍊錶 雙向鍊錶

注意typedef的定義結構,以及dinklist的資料型別 typedef struct dnode dnode,dinklist 注意插入第乙個結點時,prior指標的空指向問題 if l next null 若l後繼結點為空 則省略該步驟 l next prior p 基本 頭插法建立雙向鍊錶...

資料結構 雙向鍊錶

前幾天寫了乙個單向鍊錶,今天參考自己單向鍊錶改寫了乙個雙向非迴圈鍊錶,下面只討論雙向非迴圈鍊錶。雙向非迴圈鍊錶有如下特點 一 雙向鍊錶每個結點都有乙個前驅指標和後驅指標 當然頭結點和尾結點除外 二 雙向鍊錶中的任意乙個結點開始,都可以很方便地訪問它的前驅結點和後繼結點。三 頭結點只有後驅指標沒有前驅...