資料結構 單鏈表(帶頭結點)

2021-10-01 22:24:44 字數 3101 閱讀 7489

單鏈表是一種鏈式訪問的資料結構,用一組位址任意的儲存單元存放線性表中的資料元素。鍊錶中的資料是以結點來表示的,每個結點的構成:元素(資料元素的映象) + 指標(指示後繼元素儲存位置),元素就是儲存資料的儲存單元,指標就是連線每個結點的位址資料。(簡單講就是邏輯相鄰,物理不相鄰)

帶頭結點:

list.h

#pragma once

//帶頭節點的單鏈表,尾節點的next為null

//頭節點起哨兵位作用,它不使用(資料域不能儲存資料)

typedef struct node

node,*list; //list == node*

//鍊錶初始化

void initlist(list plist);

//頭插

bool insert_head(list plist,int val);

//尾插

bool insert_tail(list plist,int val);

//查詢

node *search(list plist,int key);

//刪除

bool delete(list plist,int key);

//獲取單鏈表的長度

int getlength(list plist);

//判空

bool isempty(list plist);

//清空

void clear(list plist);

//摧毀

void destroy(list plist);

//列印

void show(list plist);

//獲取元素

bool getelem(list plist,int pos,int *rtval);

//逆置

void reverse(list plist);

//除去重複的資料值

void unique(list plist);

list.cpp

#include#include#include#include"list.h"

//鍊錶初始化

void initlist(list plist)

plist->next = null;

}

頭插法:

如圖:頭結點是*l。。。頭結點一般儲存單鏈表的長度的資訊。

首節點是(*l)->next。。。是儲存元素的值和下乙個元素的位置的資訊。

現在我想插入乙個新的節點p。。。

第一:新節點的指標域指向首節點。

第二:修改頭結點的指標域,使其指向新節點p。

//頭插 時間複雜度o(1)

bool insert_head(list plist,int val)

node *p = (node *)malloc(sizeof(node));

p->data = val;

p->next = plist->next;

plist->next = p;

return true;

}

尾插法:

//查詢

node *search(list plist,int key)

for(node *p = plist->next;p != null;p = p->next) }

return null;}

//刪除

bool delete(list plist,int key)

} return false;}

//獲取單鏈表的長度

int getlength(list plist)

return count;}

//判空

bool isempty(list plist)

//清空

void clear(list plist)

//摧毀

void destroy(list plist)}

//列印

void show(list plist)

printf("\n");}

//獲取元素

bool getelem(list plist,int pos,int *rtval)

int i = 0;

for(node *p = plist->next;p != null;p= p->next)

i++; }

return false;}

//得到結點p的前驅

static node *getpri(list plist,node *p) }

return null;}

//逆置

void reverse(list plist)

node *p = plist->next;

node *q;

plist->next = null;

while(p != null) }

//除去重複的資料值

void unique(list plist)

} }}

主函式:

#include#include#include"list.h"

int main()

show(&head1);

show(&head2);

reverse(&head1);

show(&head1);

int val;

getelem(&head2,3,&val);

printf("%d\n",val);

destroy(&head1);

destroy(&head1);

return 0;

}

資料結構 單鏈表 帶頭結點和不帶頭結點

1 單鏈表 通過各結點的鏈結指標來表示結點間的邏輯關係,長度可擴充,遍歷或查詢 2 只能從指標的指示的首元結點開始,跟隨鏈結指標逐個結點進行訪問,進行刪除或插 4 5 6 單鏈表的結構定義 7 typedef int datatype 8 typedef struct node 9 linknode...

單鏈表(帶頭結點)

按照自己的想法和思路寫了一下帶頭結點的單鏈表,並進行了測試,畢竟自己能力有限,可能有的地方沒有測試到,還可能存在一些潛在的錯誤。標頭檔案 include using namespace std typedef struct node node,link typedef struct list lis...

單鏈表 帶頭結點

typedef struct lnodelnode,linklist 頭插法 linklist list headinsert linklist l returnl 尾插法 linklist list tailinsert linklist l r next null 尾結點指標置空 returnl...