單鏈表是一種鏈式訪問的資料結構,用一組位址任意的儲存單元存放線性表中的資料元素。鍊錶中的資料是以結點來表示的,每個結點的構成:元素(資料元素的映象) + 指標(指示後繼元素儲存位置),元素就是儲存資料的儲存單元,指標就是連線每個結點的位址資料
在寫單鏈表的時候,需要對結構體有一定的了解(這裡就不做過多的結構體介紹)
頭結點一般在棧區或者資料區開闢且頭結點不儲存有效資料,但不帶頭結點的單鏈表是以乙個指標來儲存第乙個結點的位置,相當於帶頭結點單鏈表的頭結點只儲存位址而不儲存目前的結點個數
一、建立不帶頭結點的單鏈表
不帶頭結點的單鏈表通過結構體建立
typedef
int elemtype;
typedef
struct lnode
lnode,
*linklist;
二、單鏈表所實現的功能(不帶頭結點的單鏈表)
1.計算結點數
static
intgetlinklist_length
(linklist head)
//計算結點數
return length;
}
2.找目標結點的前乙個
static linklist findprior
(linklist head,
int pos)
//找目標結點的前乙個
return p;
}
3.單鏈表建立結點並賦值
(elemtype val,linklist next)
//建立節點及賦值
4.單鏈表初始化
void
init_linklist
(linklist *head)
//初始化
5.插入
(1)位置插
int
insertlinklist_pos
(linklist *head,elemtype val,
int pos)
//位置插
linklist p =
findprior
(*head,pos)
; linklist q =
(val,p-
>next)
; p-
>next = q;
return
true
;}
(2)頭插
int
insertlinklist_head
(linklist *head,elemtype val)
//頭插
(3)尾插
int
insertlinklist_tail
(linklist *head,elemtype val)
//尾插
6.刪除
(1)位置刪
int
deletlinklist_pos
(linklist *head,
int pos)
//位置刪
linklist p =
findprior
(*head,pos)
; linklist q = p-
>next;
p->next = q-
>next;
free
(q);
return
true
;}
(2)頭刪
int
deletlinklist_head
(linklist *head)
//頭刪
(3)尾刪
int
deletlinklist_tail
(linklist *head)
//尾刪
7.列印
void
show_linklist
(linklist head)
//列印
printf
("\n");
}
8.清空單鏈表
int
clear_linklist
(linklist *head)
//清空
return
true
;}
9.銷毀單鏈表
int
destroy_linklist
(linklist *head)
//銷毀
#include
#include
#include
typedef
int elemtype;
typedef
struct lnode
lnode,
*linklist;
static
intgetlinklist_length
(linklist head)
//計算結點數
return length;
}(elemtype val,linklist next)
//建立節點及賦值
static linklist findprior
(linklist head,
int pos)
//找目標結點的前乙個
return p;
}void
init_linklist
(linklist *head)
//初始化
intinsertlinklist_head
(linklist *head,elemtype val)
//頭插
intinsertlinklist_pos
(linklist *head,elemtype val,
int pos)
//位置插
linklist p =
findprior
(*head,pos)
; linklist q =
(val,p-
>next)
; p-
>next = q;
return
true;}
intinsertlinklist_tail
(linklist *head,elemtype val)
//尾插
intdeletlinklist_head
(linklist *head)
//頭刪
intdeletlinklist_pos
(linklist *head,
int pos)
//位置刪
linklist p =
findprior
(*head,pos)
; linklist q = p-
>next;
p->next = q-
>next;
free
(q);
return
true;}
intdeletlinklist_tail
(linklist *head)
//尾刪
intclear_linklist
(linklist *head)
//清空
return
true;}
intdestroy_linklist
(linklist *head)
//銷毀
void
show_linklist
(linklist head)
//列印
printf
("\n");
}int
main()
insertlinklist_pos
(&list,
200,0)
;insertlinklist_tail
(&list,
100)
;show_linklist
(list)
;deletlinklist_head
(&list)
;deletlinklist_tail
(&list)
;deletlinklist_pos
(&list,9)
;show_linklist
(list)
;//clear_linklist(&list);
destroy_linklist
(&list)
;show_linklist
(list)
;return0;
}
資料結構 單鏈表 帶頭結點和不帶頭結點
1 單鏈表 通過各結點的鏈結指標來表示結點間的邏輯關係,長度可擴充,遍歷或查詢 2 只能從指標的指示的首元結點開始,跟隨鏈結指標逐個結點進行訪問,進行刪除或插 4 5 6 單鏈表的結構定義 7 typedef int datatype 8 typedef struct node 9 linknode...
資料結構篇 單鏈表倒置(帶頭結點 不帶頭結點)
初始化如圖 1.我們需要把1這個結點作為最後乙個結點,所以要把1的next指向null 2.然後我們要新建結點,指向headnext的下一位,並把headnext的下一位指向headpre,3.headpre指向headnext為下一次迴圈做準備 headpre headnext 4.如果tempn...
資料結構實驗2 不帶頭結點的單鏈表
編寫函式slnklist delx linklist head,datatype x 刪除不帶頭結點單鏈表head中第乙個值為x 的結點。並構造測試用例進行測試。檔名稱 lab2 01.c include slnklist.h 請將本函式補充完整,並進行測試 linklist delx linkli...