」雙向鍊錶與佇列「
「雙向鍊錶」是包含兩個指標域,乙個資料域,既有指向前驅的指標,還有指向後繼的指標,同時可以從兩個方向對鍊錶進行遍歷,訪問各個節點。「雙向鍊錶」較」單鏈表「在插入和刪除節點方面更為簡單,但是所佔的空間比「單鏈表」大。「佇列」的實現之所以選擇使用雙向鍊錶,是因為佇列的特點是「先進先出」,如若使用順序表則很大程度上的浪費空間。在這樣的情境下,鍊錶較順序表更為合適。
根據「模板」的概念,設計並實現雙向鍊錶,進而實現佇列的基本功能。下面是利用模板來實現雙向鍊錶的具體**:
#pragma once
#include //雙向鍊錶
template struct listnode
};template class list
~list() //析構函式
public:
void pushback(const t & x) //尾插
else
}void popback() //尾刪
else if (_head == _tail)
else
}void pushfront(const t & x) //頭插
else
}void popfront() //頭刪
}else
}void insert(listnode* pos,const t& x) //在pos位置上插入資料x
void erase(listnode* pos) //刪除pos位置上的資料
else if (_head == _tail)
else
}listnode* find(const t & x) //查詢
tmp = tmp->_next;
}if (tmp->_next)
}t & top() //讀取隊頭元素
t & back() //讀取隊尾元素
void reverse() //逆置
}void sort() //氣泡排序
cur = cur->_next;
tmp = tmp->_next;}}
void unique() //在有序鍊錶中,去掉重複的資料
cur = cur->_next;
tmp = tmp->_next;}}
void merge(list& s) //將某乙個鍊錶連線到這個鍊錶後面
void splice(listnode* pos, list& s) //將乙個鍊錶連線到pos位置後面
else
}size_t size() //計算鍊錶中的元素個數
return count;
}void print() //格式輸出
cout << endl;
}void clear()
}private:
listnode* _head;
listnode* _tail;
};
對於」佇列「能夠利用上述雙向鍊錶的功能來實現,下面就是基本的程式**:
#pragma once
#include //佇列
#include #include "listnode.h"
template class container = list>
class queue
void pop() //出佇列
bool empty() //判斷佇列是否為空
size_t size() //計算佇列中的元素個數
t & top() //隊頭節點
t & back() //隊尾節點
void print() //格式輸出
private:
container_con;
};
模板雙向鍊錶
順序表和煉表幾乎是面試必考點,前面我們已經介紹過了模板順序表 用模板寫鍊錶主要還是為了實現 的型別通用性,以下 將實現鍊錶的增 刪 查 改 判空等操作。define crt secure no warnings 1 pragma once include include using namespac...
雙向迴圈鍊錶模板
include include include include iostream using namespace std define maxnum 0x7fffffff define maxscore 100000 typedef struct lnode lnode,linklist 2 測鍊錶...
C 篇 雙向鍊錶list與雙向佇列deque
list的介紹 list雙向鍊錶在任何位置的插入和刪除為常數時間,不支援根據下標隨機訪問元素,具有所有順序容器都有的成員函式。list的成員函式 push front 在鍊錶最前面插入 pop front 刪除鍊錶最前面的元素 sort 排序 list 不支援 stl 的演算法 sort remov...