LinkedList 鍊錶

2021-07-04 15:45:59 字數 3306 閱讀 1137

最近複習到鍊錶(linkedlist),一般來說共有大概有兩種實現方式:1. 

陣列實現 和 2. 鏈式實現。

我僅使用了直接鏈式實現,**如下。其他的實現方式,大家不妨自己嘗試下吧。

/**************************************

* * author: ace_yom (peizhen zhang)

* date: 2015-8-17

* description: 鍊錶實現

* **************************************/

#ifndef linkedlist_h

#define linkedlist_h

#include #include using namespace std;

template struct node

node(t element)

};template class linkedlist

size ++;

} void addfirst(t element)

node* tmp = new node(element);

tmp->next = head;

head = tmp;

size ++;

} node* prenodeofindex(int index)

public:

linkedlist();

bool checkindex(int index,int first,int last); //檢查越界

t getfirst(); //獲取第乙個節點的值

t getlast(); //獲取最後乙個節點的值

t removefirst(); //刪除第乙個節點, 並返回值

t removelast(); //刪除最後乙個節點, 並返回值

void remove(t element); //刪除所有值為element的節點

t removeat(int index); //刪除在index處的節點, 並返回值

void add(t element); //增加節點

void add(int index , t element); //在index處增加節點

void clear(); //清空鍊錶

bool contains(t element); //查詢是否包含值為element的節點

int indexof(t element); //返回第乙個其值為element的節點的索引

bool isempty(); //表是否空

int lastindexof(t element); //最後乙個值為element的節點的索引

int getsize(); //獲取表長

t get(int index); //獲取在index處的節點的值

void set(int index, t element); //重新設定在index處的節點的值

void print(); //列印鍊錶

};template linkedlist::linkedlist()

template bool linkedlist::checkindex(int index, int first, int last)

template t linkedlist::getfirst()

template t linkedlist::getlast()

template t linkedlist::removefirst()

template t linkedlist::removelast()

template void linkedlist::add(t element)

template void linkedlist::add(int index, t element)

else }

template void linkedlist::clear()

tail = head;

size = 0;

}template bool linkedlist::contains(t element)

return false;

}template t linkedlist::get(int index)

node* p = head;

for(int i = 0 ; i < index-1 ; i ++)

p = p->next;

return p->element;

}template int linkedlist::indexof(t element)

return -1;

}template bool linkedlist::isempty()

template int linkedlist::lastindexof(t element)

return inde;

}//implemented mainly via two pointers

template void linkedlist::remove(t element)

//rear->element != element, tail後移; front,rear後移

else

}}template int linkedlist::getsize()

template t linkedlist::removeat(int index)

if(index == 1)

return removefirst();

else if(index == size)

return removelast();

else }

template void linkedlist::set(int index , t element)

template void linkedlist::print()

cout << head->element;

node* p = head->next;

while(p)

cout << endl;

}#endif

references:

[1] introduction to programming with c++ (comprehensive version) y.daniel liang

[2] 資料結構(c 語言版) 嚴蔚敏 吳偉民 編著

LinkedList 鍊錶

線性表是一種簡單的資料結構,其主要特點是元素之間存在 一對一 的關係,除去第乙個元素,每個元素都存在唯一乙個 前驅節點 除去最後乙個元素都存在唯一乙個 後繼節點 簡單的線性表有 陣列 單鏈表 雙向鍊錶 靜態鍊錶等。順序表 陣列 優缺點 陣列不僅邏輯上,物理上位置也相鄰,可隨機訪問,但刪除或插入元素時...

鍊錶 LinkedList

原文中singlelinklist的remove方法有問題,因為是 node current firstnode.getnext 所以導致鍊錶的第乙個節點刪不掉。修改如下 public class singlelinklist 刪除某個節點 param element return 刪除成功返回tr...

鍊錶(LInked LIst)

今天上午憑藉昨天晚上自己學習的指標,今天學習了鍊錶,發現還是乙個非常有用的資料結構,從此我知道了學習指標的重要性。很多人給我說,指標這個東西其實沒有什麼太大的作用,認為鍊錶其實也可以不用指標寫,雖然 篇幅要大一些,但是要好理解一些,但是其實用指標寫利遠遠大於弊,這裡列出一些我認為是優點的東西。指標變...