三、【线性表】线性表概述
線性表概述 Linear List
在了解線性表之前,我們首先了解一下什么是線性結(jié)構(gòu)。線性結(jié)構(gòu)的特點(diǎn)是:在數(shù)據(jù)元素的非空有限集中
1 線性表的定義
線性表是一種最常用且最簡(jiǎn)單的數(shù)據(jù)結(jié)構(gòu)。簡(jiǎn)單來說,一個(gè)線性表是 nnn (n≥0)(n \ge 0)(n≥0) 個(gè)數(shù)據(jù)元素的有限序列,其中 nnn 為表長(zhǎng),當(dāng) n=0n=0n=0 時(shí)線性表是一個(gè)空表。若用 LLL 命名線性表,則其一般表示為
L=(a1,a2,…,ai,ai+1,…,an)L = (a_1, a_2, \dots, a_i, a_{i+1}, \dots, a_n) L=(a1?,a2?,…,ai?,ai+1?,…,an?)
其中 a1a_1a1? 又稱為表頭元素,ana_nan? 又稱為表尾元素,iii 稱為數(shù)據(jù)元素 aia_iai? 在線性表中的位序。除開表頭元素,任意元素有且僅有一個(gè)前驅(qū);除開表尾元素,任意元素有且僅有一個(gè)后驅(qū)。這種線性有序的邏輯特征就是線性表名字的由來。
在生活中,我們經(jīng)常用到線性表這樣的數(shù)據(jù)結(jié)構(gòu)。例如,包含26個(gè)英文字母的字母表 (A,B,C,…,Z)(A, B, C, \dots, Z)(A,B,C,…,Z) 就是一個(gè)線性表,其數(shù)據(jù)元素是單個(gè)字母字符。又比如,某個(gè)中學(xué)對(duì)學(xué)生年齡的統(tǒng)計(jì) (12,12,13,14,12)(12, 12, 13, 14, 12)(12,12,13,14,12) ,其數(shù)據(jù)元素是整數(shù)。在稍復(fù)雜的情況下,線性表中的數(shù)據(jù)元素還可以由若干個(gè)數(shù)據(jù)項(xiàng)構(gòu)成。例如某醫(yī)院對(duì)病人的信息記錄由五個(gè)部分組成:姓名、身份證號(hào)、性別、年齡和健康狀況。在這種情況下,我們常把數(shù)據(jù)元素稱為記錄(Record),含有大量記錄的線性表又稱為文件(File)
通過上述例子我們可以歸納,不同線性表中的數(shù)據(jù)元素的類型可以是不同的,但是在同一線性表中,所有數(shù)據(jù)元素必定具有相同特性(或?qū)儆谕粩?shù)據(jù)類型)。
同時(shí),我們可以發(fā)現(xiàn)線性表討論的只是各數(shù)據(jù)元素之間的邏輯關(guān)系,并不涉及數(shù)據(jù)元素的存儲(chǔ)和運(yùn)算,因此線性表是一種邏輯結(jié)構(gòu)。
總結(jié)一下,線性表有如下特點(diǎn):
- 表中元素個(gè)數(shù)有限。
- 表中元素具有邏輯上的順序性,有其先后次序。
- 表中元素都是數(shù)據(jù)元素。
- 表中元素的數(shù)據(jù)類型都相同,這意味著每個(gè)元素占有相同大小的存儲(chǔ)空間。
- 表中元素具有抽象性,即僅討論元素間的邏輯關(guān)系。
2 線性表的基本操作
一個(gè)數(shù)據(jù)結(jié)構(gòu)的基本操作是指其最核心,最基本的操作。其他較復(fù)雜的操作都可以通過調(diào)用其基本操作來實(shí)現(xiàn)。
2.1 主要操作
線性表的主要操作如下:
| InitList(&L) | 初始化操作,構(gòu)造一個(gè)空的線性表 |
| DestroyList(&L) | 銷毀操作,銷毀線性表并釋放所占用的內(nèi)存空間 |
| ListEmpty(L) | 判空操作,若 L 為空返回True,否則返回False |
| ListLength(L) | 求表長(zhǎng)操作,返回線性表 L 的長(zhǎng)度,即元素個(gè)數(shù) |
| GetElem(L, i) | 按位查找操作,獲取表 L 中第 i 個(gè)位置的元素的值 |
| LocateElem(L, e) | 按值查找操作,在表中查找具有給定關(guān)鍵字值的元素 |
| ListInsert(&L, i , e) | 插入操作,在表的第 i 個(gè)位置插入元素 e |
| ListDelete(&L, i , &e) | 刪除操作,刪除表中第 i 個(gè)元素的值,并用 e 返回刪除元素的值 |
| ListPrint(L) | 輸出操作,按前后順序輸出線性表 L 的所有元素值 |
2.2 其他常用操作
2.2.1 兩表的并集
假設(shè)現(xiàn)在有兩個(gè)線性表 LALALA 和 LBLBLB ,要求擴(kuò)大線性表 LALALA ,將存在于線性表 LBLBLB 中而不存在于線性表 LALALA 中的數(shù)據(jù)元素插入到線性表 LALALA 中去。
基本思路是從線性表 LBLBLB 中依次取得每個(gè)數(shù)據(jù)元素,并依值在線性表 LALALA 中查找,若不存在則插入該數(shù)據(jù)元素。
2.2.2 兩表的合并
假設(shè)現(xiàn)在有兩個(gè)線性表 LALALA 和 LBLBLB ,它們的數(shù)據(jù)元素按值非遞減有序排列,現(xiàn)要求將 LALALA 和 LBLBLB 歸并為一個(gè)新的線性表 LCLCLC ,且 LCLCLC 中的元素仍按值非遞減有序排列。例如,假設(shè)
LA=(3,5,8)LB=(2,8,9)\begin{aligned} LA &= (3, 5, 8) \\ LB &= (2, 8, 9) \end{aligned} LALB?=(3,5,8)=(2,8,9)?
則
LC=(2,3,5,8,8,9)\begin{aligned} LC &= (2, 3, 5, 8, 8, 9) \end{aligned} LC?=(2,3,5,8,8,9)?
基本思路是先令 LCLCLC 為空表,然后用兩個(gè)指針 iii 和 jjj 分別指向 LALALA 和 LBLBLB 中的元素,比較元素大小,將更小的元素插入 LCLCLC 中,并將對(duì)應(yīng)的指針后移一位。
相關(guān)章節(jié)
第一節(jié) 【緒論】數(shù)據(jù)結(jié)構(gòu)的基本概念
第二節(jié) 【緒論】算法和算法評(píng)價(jià)
第三節(jié) 【線性表】線性表概述
第四節(jié) 【線性表】線性表的順序表示和實(shí)現(xiàn)
第五節(jié) 【線性表】線性表的鏈?zhǔn)奖硎竞蛯?shí)現(xiàn)
第六節(jié) 【線性表】雙向鏈表、循環(huán)鏈表和靜態(tài)鏈表
第七節(jié) 【棧和隊(duì)列】棧
第八節(jié) 【棧和隊(duì)列】棧的應(yīng)用
第九節(jié) 【棧和隊(duì)列】棧和遞歸
第十節(jié) 【棧和隊(duì)列】隊(duì)列
總結(jié)
以上是生活随笔為你收集整理的三、【线性表】线性表概述的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 二、【绪论】算法和算法评价
- 下一篇: 四、【线性表】线性表的顺序表示和实现