鍊錶是一種常見樹資料結構。鍊錶就像是乙個班級的學生資訊表,資訊表中儲存有學生的學號,姓名等個人資訊,資訊表中每一行儲存乙個學生的資訊,而鍊錶中每個節點儲存乙個學生的資訊,但是學生資訊表中的個人資訊是以**的形式按學號依次排列的,其物理位置是有順序的,而鍊錶在計算機記憶體中煉表是無序的(鍊錶只是邏輯位置上是有序的,而在物理位置上是無序的),計算機想要訪問記憶體中的資料就得先要知道儲存該資料的位址,所以計算機想要知道鍊錶中學生的資訊,就要先找到儲存該學生資訊節點的位址,因此鍊錶設定了乙個頭節點,該節點儲存著第乙個節點的位址,其餘節點中儲存著學生的資訊(資訊域)和下一節點的位址(指標域),即第乙個節點儲存著第乙個學生的個人資訊和第二個節點的位址,第二個節點儲存著第二個學生的個人資訊和第三個節點的位址,以此類推。所以計算機想要知道鍊錶中某乙個學生的資訊就要從第乙個節點開始依次查詢,直到找出儲存那乙個學生資訊的節點為止。如果鍊錶中沒有儲存你查詢的學生的資訊,那麼計算機是不是會一直訪問鍊錶呢?鍊錶中最後乙個節點的指標域是指向null的,null作為訪問鍊錶的結束標誌,當計算機訪問到null時結束該次訪問。
特點:當訪問乙個節點後,只能接著訪問下乙個節點,而無法返回訪問上乙個節點(既然選擇了遠方,便只顧風雨兼程)
優點:儲存的元素個數不受限制(記憶體充足即可),可以隨意的增加和減少元素個數
缺點:不可以隨機的訪問鍊錶節點
編譯環境:vs2017
#include
#include
#include
#pragma warning(disable:4996)
typedef
struct users
users;
void
addusers
(users **)
;void
deleteusers
(users **)
;void
modifyusers
(users *);
void
findusers1
(users *);
void
findusers2
(users *);
void
freelist
(users **)
;int
main()
}}
//尾插法
void
addusers
(users *
*p)//注意是 **p 而不是 *p,為什麼用 **p 而不是 *p 自己思考一下哈,有助於自己的理解
users *q1 =
null
,*q2 =
*p;
q1 =
(users *
)malloc
(sizeof
(users));
printf
("請輸入賬號\n");
scanf_s
("%ld"
,&q1->id);if
(*p !=
null
)else}}
printf
("請輸入使用者名稱:");
scanf_s
("%s"
, q1->name,10)
;printf()
;scanf
("%lld"
,&q1->num);if
(*p ==
null
)//大家想一下為什麼要判斷頭節點指向 null 哈。問題雖然是小問題但是還是得多多注意哈
else
printf
("賬戶註冊成功!\n");
}
void
deleteusers
(users *
*p)if
(p1 ==
null
)//鍊錶為空或者鍊錶中無該賬號
else
if(n ==0)
//注意這個條件與上面乙個條件的順序哈,當兩個條件調換時是否會改變程式的功能。自己實踐一下哈,所謂實踐出真知
else
}
void
modifyusers
(users *p)
if(p ==
null
)//修改、查詢使用者資訊的第一前提是判斷有無該使用者
while(1)}}
void
findusers1
(users *p)
//查詢使用者資訊
if(p ==
null
)printf
(, p->id, p->name, p->num);}
void
findusers2
(users *p)
//查詢所有使用者資訊
這篇文章花了挺長時間的,做了很多細節的修改,但由於時間、水平、精力有限,文中難免會出現不準確的、甚至錯誤的地方,歡迎大佬看見的話批評指正。
單鏈表增刪改查
include include include include using namespace std struct node node int x,node next null 帶參初始化 建立煉表頭結點,新增引用因為要改變指標的位址指向 void createlink node head 新增鍊...
單鏈表增刪改查
單鏈表單鍊錶 linked list 由各個記憶體結構通過乙個 next 指標鏈結在一起組成,每乙個內 存結構都存在後繼記憶體結構 鏈尾除外 記憶體結構由資料域和 next 指標域組成。單鏈表實現圖示 解析 data 資料 next 指標,組成乙個單鏈表的記憶體結構 第乙個記憶體結構稱為 鏈頭,最後...
單鏈表 增刪改查
目錄基本面試題 class heronode class singlelinkedlistpublic void add heronode heronode public void addbyorder heronode heronode if temp.next.no heronode.no el...