1、什麼是鍊錶
動態陣列、棧和佇列:底層依託靜態陣列;靠resize解決固定容量問題
鍊錶:class node
}}2、鍊錶操作–新增元素
(1)在煉表頭新增元素:
node.next=head; head=node;
public
void
addfirst
(e e)
(2)在鍊錶中間新增元素:
find prev(新增的節點的前乙個節點); node.next=prev.next; prev.next=node
特殊:在首部新增節點
public
void
add(
int index,e e)
if(index==0)
else
prev.next=
newnode
(e,prev.next)
; size++;}
}
3、虛擬頭結點dummyhead
不需區分首部和中間節點。新增元素。
private node dummyhead;
dummyhead=
newnode
(null,null)
;#核心**
node prev=dummyhead;
for(
int i=
0;i)prev.next=
newnode
(e,prev.next)
;size++
;
4、鍊錶的遍歷、查詢和修改
set、get、contains
public e get
(int index)
node cur=dummyhead.next;
for(
int i=
0;i)return cur.e;
}
public
boolean
contains
(e e)
cur=cur.next;
}return
false
;}
5、鍊錶元素刪除
#按index刪除
public e remove
(int index)
node prev=dummyhead;
for(
int i=
0;i) node retnode=prev.next;
prev.next=retnode.next;
retnode.next=null;
size--
;return retnode.e;
}
#按元素值刪除
public
void
removeelement
(e e)
if(prev.next != null)
}
6、時間複雜度分析
8、使用鍊錶實現棧
linkedliststack
push–addfirst 煉表頭是棧頂
public
class
linkedliststack
implements
stack
public
intgetsize()
……isempty\push\pop\peek等操作
}
陣列棧和鍊錶棧的比較:
時間複雜度差別不大9、使用鍊錶實現佇列(無虛擬頭結點)
增加尾指標tail,插入元素變得方便,但是刪除元素仍要遍歷找到retnode的前乙個節點,複雜度較高。
因此,實現佇列:
從head端刪除元素,從tail端插入元素。由於沒有dummyhead,要注意鍊錶為空的情況。
public
class
linkedlistqueue
implements
queue
#增加尾指標
private node head,tail;
@override
public
void
enqueue
(e e)
else
size++;}
@override
public e dequeue()
node retnode=head;
head=head.next;
retnode.next=null;
if(head==null)
tail=null;
size--
;return retnode.e;
}
資料結構 動態鍊錶
鍊錶 儲存資料元素的資訊的域稱為資料域 data域 存的就是該節點要存的元素 這兩個部分組成起來的資料稱之為節點 node node data next 單鏈表 只包含乙個指標域的節點組合起來的,叫做單鏈表,只知道下乙個節點位址 雙鏈表 對於乙個節點而言,需要兩個位址,要知道上乙個節點的位址和下乙個...
動態資料結構 鍊錶
include include 引用malloc 函式 結點結構體 struct node 不要忘了分號 頭尾指標定義 struct node phead null 全域性變數 struct node pend null 全域性變數 尾插法 void addlisttail int a 頭插法 vo...
動態資料結構 動態建立鍊錶
include include struct weapon struct weapon create 需要乙個建立鍊錶的函式,函式的返回值型別是struct weapon 型別 p2 next null return head int main 總結 p1用來儲存當前的節點,建立完後掛在前面節點後面...