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