數據結構與算法(3)-線性表

目錄
一.線性表的定義
二.線性表的順序存儲結構
    1.順序存儲的定義:
    2.順序存儲方式:
    3.數組長度與線性表長度的區別
    4.地址計算方法
三.順序存儲結構的插入與刪除
    1.獲得元素操作
    2.插入操作
    3.數組長度與線性表長度的區別
    4.線性表順序存儲的優缺點
四.線性表的鏈式存儲結構
    1.線性錶鏈式存儲結構定義:
    2.頭指針與頭節點的異同
五.單鏈表的讀取
六.單鏈表的插入與刪除
    1.單鏈表的插入:
    2.單鏈表的刪除:
七.單鏈表的整表創建
    1.創建單鏈表的過程就是一個動態生成鏈表的過程
    2.單鏈表整表創建的算法思路:
八.單鏈表的整表刪除
    1.單鏈表整表刪除的算法思路如下:
九.單鏈表結構與順序存儲結構優缺點
十.靜態鏈表
    2.靜態鏈表的優缺點
十一.循環鏈表
十二.雙向鏈表

線性表

一.線性表的定義

1.線性表是零個或多個具有相同類型的數據元素的有限序列

2.線性表的關鍵:

(1)首先線性表是一個序列,元素之間是有順序的
(2)然後,線性表強調是有限的

二.線性表的順序存儲結構

1.順序存儲的定義:

線性表的順序存儲結構,指的是用一段地址連續的存儲單元依次存儲線性表的數據元素

順序存儲示意圖

2.順序存儲方式:

(1)描述順序存儲結構需要三個屬性:
  • 存儲空間的起始位置:數組data,它的存儲位置就是存儲空間的存儲位置
  • 線性表的最大存儲容量:數組長度MaxSize
  • 線性表的當前長度:length

3.數組長度與線性表長度的區別

(1)數組的長度是存放線性表的存儲空間的長度,存儲分配後這個量一般是不變的
(2)線性表的長度是線性表中數據元素的個數,隨着線性表插入和刪除操作的進行,這個量是變化的
(3)線性表的長度應該小於等於數組的長度

4.地址計算方法

三.順序存儲結構的插入與刪除

1.獲得元素操作

2.插入操作

(1)插入算法的思路:
  • 如果插入位置不合理,拋出異常;
  • 如果線性表長度大於等於數組長度,則拋出異常或動態增加容量;
  • 從最後一個元素開始向前遍歷到第i個位置,分別將它們都向後移動一個位置;
  • 將要插入元素填入位置i處,表長加1

3.刪除操作

(1)刪除算法的思路:
  • 如果刪除位置不合理,拋出異常;
  • 取出刪除元素;
  • 從刪除元素位置開始遍歷到最後一個元素位置,分別將它們都向前移動一個位置;
  • 表長減1

4.線性表順序存儲的優缺點

線性表順序存儲的優缺點

(1)線性表的順序存儲結構,在存、讀數據時,不管是哪個位置,時間複雜度都是O(1);而插入或刪除時,時間複雜度都是O(n)

四.線性表的鏈式存儲結構

線性表的鏈式存儲結構

1.線性錶鏈式存儲結構定義:

(1)線性表的鏈式存儲結構的特點:

是用一組任意的存儲單元存儲線性表的數據元素,這組存儲單元可以是連續的,也可以是不連續的。這就意味着,這些數據元素可以存在內存未被佔用的任意位置

(2)鏈表的每個結點中只包含一個指針域,所以叫做單鏈表
(3)鏈表中第一個結點的存儲位置叫做頭指針
(4)線性鏈表的最後一個結點指針爲“空”

2.頭指針與頭節點的異同

頭指針與頭節點的異同

五.單鏈表的讀取

(1).獲得鏈表第i個數據的算法思路:
  • 聲明一個指針p指向鏈表第一個結點,初始化j從1開始;
  • 當j<i時,就遍歷鏈表,讓p的指針向後移動,不斷指向下一結點,j累加1;
  • 若到鏈表末尾p爲空,則說明第i個結點不存在;
  • 否則查找成功,返回結點p的數據

六.單鏈表的插入與刪除

1.單鏈表的插入:

(1)單鏈表第i個數據插入結點的算法思路:
  • 聲明一指針p指向鏈表頭結點,初始化j從1開始;
  • 當j<i時,就遍歷鏈表,讓p的指針向後移動,不斷指向下一結點,j累加1;
  • 若到鏈表末尾p爲空,則說明第i個結點不存在;
  • 否則查找成功,在系統中生成一個空結點s;
  • 將數據元素e賦值給s->data;
  • 單鏈表的插入標準語句s->next=p->next;p->next=s;
  • 返回成功

2.單鏈表的刪除:

(1)單鏈表第i個數據刪除結點的算法思路:
  • 聲明一指針p指向鏈表頭結點,初始化j從1開始;
  • 當j<i時,就遍歷鏈表,讓p的指針向後移動,不斷指向下一個結點,j累加1;
  • 若到鏈表末尾p爲空,則說明第i個結點不存在;
  • 否則查找成功,將欲刪除的結點p->next賦值給q;
  • 單鏈表的刪除標準語句p->next=q->next;
  • 將q結點中的數據賦值給e,作爲返回;
  • 釋放q結點;
  • 返回成功

七.單鏈表的整表創建

1.創建單鏈表的過程就是一個動態生成鏈表的過程

2.單鏈表整表創建的算法思路:

(1).聲明一指針p和計數器變量i;
(2).初始化一空鏈表L;
(3).讓L的頭結點的指針指向NULL,即建立一個帶頭結點的單鏈表;
(4).循環:
  • 生成一新結點賦值給p;
  • 隨機生成一數字賦值給p的數據域p->data;
  • 將p插入到頭結點與前一新結點之間

八.單鏈表的整表刪除

1.單鏈表整表刪除的算法思路如下:

(1).聲明一指針p和q;
(2).將第一個結點賦值給p;
(3).循環:
  • 將下一結點賦值給q;
  • 釋放p;
  • 將q賦值給p

九.單鏈表結構與順序存儲結構優缺點

單鏈表結構與順序存儲結構優缺點

(1).若線性表需要頻繁查找,很少進行插入和刪除操作時,宜採用順序存儲結構。若需要頻繁插入和刪除時,宜採用單鏈表結構
(2).當線性表中的元素個數變化較大或者根本不知道有多大時,最好用單鏈表結構

十.靜態鏈表

1.用數組描述的鏈表叫做靜態鏈表,這種描述方法還有起名叫做遊標實現法

2.靜態鏈表的優缺點:

靜態鏈表的優缺點

十一.循環鏈表

1.將單鏈表中終端結點的指針端由空指針改爲指向頭結點,就使整個單鏈表形成一個環,這種頭尾相接的單鏈表稱爲單循環鏈表,簡稱循環鏈表

十二.雙向鏈表

(1).雙向鏈表(double linkedlist)是在單鏈表的每個結點中,再設置一個指向其前驅結點的指針域。所以在雙向鏈表中的結點都有兩個指針域,一個指向直接後繼,另一個指向直接前驅。
(2).雙向鏈表當然也可以是循環表
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章