資料結構:單鏈表
單鏈表的定義:
單鏈表是用一組任意的儲存單元存放線性表的元素,這組儲存單元可以連續也可以不連續,甚至可以零散分布在記憶體中的任意位置。每個儲存單元在儲存資料元素的同時,還必須儲存其後記元素的位址資訊,這個位址資訊稱為指標。這兩部分組成了資料元素的儲存映像,稱為結點。結點node分為資料域data和指標域next。
結點定義:(採用模板機制)
template
struct node
;頭結點:如果鍊錶有頭節點,則鏈式結構中的第乙個節點稱為頭結點:其資料域可以儲存一些附加資訊,如鍊表長度;其指標域指向鍊錶中的第乙個節點。
單鏈表的實現:
template
class linklist
linklist ( t a[ ], int n ) ;
~linklist ( ) ;
int length ( ) ;
t get ( int i ) ;
int locate ( t x ) ;
void insert ( int i, t x ) ;
t delete ( int i ) ;
void printlist ( ) ;
private:
node*first; // 單鏈表的頭指標 , 可以省略
};建構函式:
頭插法:
①帶頭結點
template
linklist:: linklist(t a[ ], int n)
}②不帶頭節點
}尾插法:
①帶頭結點
template
linklist:: linklist(t a[ ], int n)
}②不帶頭結點
node*r;
head=null;
if(n<=0)return;
s=new node;
s->data=a[0];
s->next=head;
head=s;
r=head;
for(int i=1;is=new node;
s->data=a[i];
r->next=s;
r=s;
}單鏈表的遍歷:
template
linklist:: printlist()
}查詢演算法:
①按位查詢
1 工作指標p初始化,計數器初始化
2 執行下列操作,直到p為空或指向第i個節點
(1)工作指標後移
(2) 計數器增1
3 若p為空,則第i個元素不存在,丟擲位置異常;否則查詢成功,返回節點p的資料元素
template
t linklist::get(int i)
if (!p) throw "位置";
else return p->data;
}②按值查詢
template
int linklist::locate(t x)
return 0;
}插入演算法:
1 工作指標p初始化,計數器初始化
2 查詢第i-1個節點,並使工作指標p指向該節點
3 若查詢不成功(p==null),說明位置錯誤,丟擲位置異常,否則
(1)生成乙個元素值為x的新節點s
(2)將s插入到p之後
①帶頭結點
template
void linklist::insert(int i, t x)
if (!p) throw "位置";
else
}②不帶頭節點
insert(int i, t x)
p=first ; j=1; //工作指標p初始化
while (p && jp=p->next; //工作指標p後移
j++;
}if (!p) throw "位置";
else
}刪除演算法:
template
t linklist::delete(int i)
if (!p || !p->next) throw "位置"; //結點p不存在或結點p的後繼結點不存在
else
}析構函式:含不含頭節點都可
template
linklist:: ~linklist()
}
資料結構 鍊錶之單鏈表
單鏈錶即每個節點都存在資料域和指標域 特殊節點除外 每個節點都乙個直接前驅節點和直接後繼節點 頭節點無前驅,尾節點無後繼 簡單來說就是上乙個節點的指標域中存放了下乙個節點的位址,因此可以實現層層節點依次查詢,時間複雜度為o n 這也就是相對順序表而言的缺點,但是對於頻繁的插入和刪除節點卻是相對於順序...
資料結構03 鍊錶之單鏈表
鍊錶帶頭結點和不帶頭結點的區別?完成單鏈表的以下基本操作 完整 鍊錶的結構非常多樣,以下情況組合起來就有8種鍊錶結構 單向 雙向 帶頭 不帶頭 迴圈 非迴圈 鍊錶的節點 typedef struct slistnode node,pnode 鍊錶的結構,給乙個頭指標儲存鍊錶第乙個節點的位址 type...
資料結構總結 單鏈表 迴圈鍊錶 雙向鍊錶
總體構成 頭節點 不作資料的儲存,儲存鍊錶的公共資料資訊,如 長度 另外還有,還包括頭指標,指向第乙個資料節點 資料節點 顧名思義是存資料的,鍊錶最後的節點的指標域為null 節點的構成 資料域 儲存資料元素資訊 操作流程 遍歷的流程 1.通過頭節點的指標域得到第乙個元素 2.在通過第乙個元素的資料...