單鏈表的另乙個缺陷
-單向性
·只能從頭結點開始高效訪問鍊錶中的資料元素
-缺陷·如果需要逆向訪問單鏈表中的資料元素將極其低效
雙向的線性表
-在「單鏈表」的結點中增加乙個指標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 基本 頭插法建立雙向鍊錶...
資料結構 雙向鍊錶
前幾天寫了乙個單向鍊錶,今天參考自己單向鍊錶改寫了乙個雙向非迴圈鍊錶,下面只討論雙向非迴圈鍊錶。雙向非迴圈鍊錶有如下特點 一 雙向鍊錶每個結點都有乙個前驅指標和後驅指標 當然頭結點和尾結點除外 二 雙向鍊錶中的任意乙個結點開始,都可以很方便地訪問它的前驅結點和後繼結點。三 頭結點只有後驅指標沒有前驅...