天天看點

【408資料結構與算法】—單連結清單(五)

【408資料結構與算法】—單連結清單(五)

一、什麼是單連結清單

  • 單連結清單:每個結點隻有一個指針域
  • 雙連結清單:每個結點有兩個指針域
  • 循環連結清單:連結清單結點首尾相接

二、帶頭結點的單連結清單

單連結清單是由表頭唯一确定的,是以單連結清單可以用頭指針的名字來命名若頭指針名是L,則連結清單稱為表L

【408資料結構與算法】—單連結清單(五)
【408資料結構與算法】—單連結清單(五)

🎊單連結清單的存儲結構

【408資料結構與算法】—單連結清單(五)
【408資料結構與算法】—單連結清單(五)
【408資料結構與算法】—單連結清單(五)

定義連結清單L:​

​LinkList;​

​​ 定義結點指針p:​

​LNode *p<=>LinkList p;​

例如:存儲學生學号,姓名,成績的單連結清單結點類型定義如下:

typedef Struct student{
  char num[8];
  char name[8];
  int score;
  struct  student *next;
}Lnode,*LinkList;      
【408資料結構與算法】—單連結清單(五)

為了統一連結清單的操作,通常這樣定義:

typedef Struct student{
  char num[8];
  char name[8];
  int score;
}ElemType;

typedef struct Lnode{
  ElemType data;
  struct Lnode *next;
  struct Lnode *next;
}Lnode,*LinkList      
【408資料結構與算法】—單連結清單(五)

三、單連結清單的基本操作

1️⃣單連結清單的初始化

算法的步驟:

  • 生成新結點作為頭結點,用頭指針L指向頭結點
  • 将頭結點的指針域置空
  • 【408資料結構與算法】—單連結清單(五)

補充算法1:判斷連結清單是否為空

空表:連結清單中無元素,稱為空連結清單(頭指針和頭結點仍然存在)

【408資料結構與算法】—單連結清單(五)

補充算法2:單連結清單的銷毀:連結清單銷毀後不存在

算法思路:從頭指針開始,依次釋放所有結點

【408資料結構與算法】—單連結清單(五)

銷毀單連結清單的算法

【408資料結構與算法】—單連結清單(五)

補充算法3:單連結清單的清空:連結清單仍然存在,但連結清單中無元素,稱為空連結清單(頭指針和頭結點仍然存在)

算法思路:依次釋放所有的結點,并将頭結點指針域設定為空

【408資料結構與算法】—單連結清單(五)
【408資料結構與算法】—單連結清單(五)

補充算法4:求單連結清單的表長

算法思路:從首元結點開始,依次計數所有結點

【408資料結構與算法】—單連結清單(五)
【408資料結構與算法】—單連結清單(五)

繼續閱讀