#include using namespace std;
typedef int rank;
#define posi(t) listnode* //列表節點位置
//節點叫法:頭 首 末 尾
templatestruct listnode
//針對header和trailer的構造
listnode(t e, posi(t) p = null, posi(t) s = null) : data(e), pred(p), succ(s) {}//預設構造器
posi(t) insertaspred(t const &e);//前插入
posi(t) insertassucc(t const &e);//後插入
};templateposi(t) listnode::insertaspred(t const &e)
templateposi(t) listnode::insertassucc(t const &e)
templateclass list
~list();
void show();
int deduplicate();//無序唯一化
int uniquify();//有序唯一化
t &operator(rank r) const;//徇秩訪問,效率低
t remove(posi(t) p);//刪除節點
posi(t) first() const //首節點位置
posi(t) last() const //末節點位置
//以p為根節點,在他的n個真前驅中找e
posi(t) find(t const &e, int n, posi(t) p) const;
//p的n個真前驅中,找到不大於e的最後者
posi(t) search(t const &e, int n, posi(t) p) const;
posi(t) insertasfrist(t const &e);//將e作為首節點插入
posi(t) insertaslast(t const &e);//將e作為末節點插入
posi(t) insertbefore(posi(t) p, t const &e);//e作為p的前驅插入
posi(t) insertafter(posi(t) p, t const &e);//e作為p的後繼插入
void selectionsort(posi(t) p, int n);//p後的n個節點擊擇排序
posi(t) selectmax(posi(t) p, int n);//選出最大值
void insertionsort(posi(t) p, int n);//p後的n個節點插入排序
};templatevoid list::init()
templatevoid list::copynodes(posi(t) p, int n)
}templateint list::clear()
templatelist::~list()
templateint list::deduplicate()
return oldsize - _size;
}templateint list::uniquify()
templatet &list::operator(rank r) const //&是後加上去的
templatet list::remove(posi(t) p)
templateposi(t) list::find(t const &e, int n, posi(t) p) const
templateposi(t) list::search(t const &e, int n, posi(t) p) const
templateposi(t) list::insertasfrist(t const &e)
templateposi(t) list::insertaslast(t const &e)
templateposi(t) list::insertbefore(posi(t) p, t const &e)
templateposi(t) list::insertafter(posi(t) p, t const &e)
templatevoid list::selectionsort(posi(t) p, int n)
}templateposi(t) list::selectmax(posi(t) p, int n)
templatevoid list::insertionsort(posi(t) p, int n)
}//一次插入對應一次銷毀,o(1)輔助空間,原地操
templatevoid list::show()
coutt dequeue()
t &front()
};int main(int argc, char const *argv)
redis資料結構之List
在redis中,list型別是按照插入順序排序的字串鍊錶。和資料結構中的普通鍊錶一樣,我們可以在其頭部 left 和尾部 right 新增新的元素。在插入時,如果該鍵並不存在,redis將為該鍵建立乙個新的鍊錶。與此相反,如果鍊錶中所有的元素均被移除,那麼該鍵也將會被從資料庫中刪除。list中可以包...
Redis資料結構之list
lpush rpush 從左邊 右邊插入乙個或多個值,類似推箱子。lpop rpop 從左邊 右邊吐出乙個值。值在鍵在,值光鍵亡 rpoplpush 從列表右邊吐出乙個值,插到列表左邊 lrange 按照索引下標獲得元素 從左到右 lindex 按照索引下標獲得元素 從左到右 llen 獲得列表長度...
資料結構之佇列
八 佇列 鏈式佇列 鍊錶實現 隊尾 rear 隊首 front 靜態佇列 陣列實現 必須是迴圈佇列 需要幾個引數來確定,各引數含義 1 佇列初始化 front和rear值都是0 2 佇列非空 front代表佇列第乙個元素 rear代表佇列最後乙個元素的 下乙個元素 3 佇列空 front和rear相...