? 線性表的順序存儲(chǔ)結(jié)構(gòu)及實(shí)現(xiàn)
1. 順序存儲(chǔ)結(jié)構(gòu)的基本思想:
? ? ? 用一組連續(xù)的存儲(chǔ)單元依次存儲(chǔ)數(shù)據(jù)元素,數(shù)據(jù)元素之間的邏輯關(guān)系由元素的存儲(chǔ)位置來表示。
? 線性表的順序存儲(chǔ)結(jié)構(gòu)稱為順序表
? 順序表是用一段地址連續(xù)的存儲(chǔ)單元依次存儲(chǔ)線性表的數(shù)據(jù)元素。常用一維數(shù)組來實(shí)現(xiàn),線性表的數(shù)據(jù)元素的序號(hào)和存放它的數(shù)組的下標(biāo)有一一對(duì)應(yīng)關(guān)系。
? 線性表中有插入操作,所以數(shù)組長度Maxside應(yīng)大于線性表長度Length。
? 設(shè)順序表的每個(gè)元素占用c個(gè)存儲(chǔ)單元,則第i個(gè)元素(指該元素的序號(hào)為i)的存儲(chǔ)地址(不是求a1到ai的存儲(chǔ)空間的大小)為:
? ? ? ? LOC(ai)=LOC(a1)+(i-1)*c;
? 其遞歸形式為:
? ? ? ? LOC(a i+1)=LOC(a i)+ c;
? 任一個(gè)單元,其偏移地址+基準(zhǔn)單元的絕對(duì)地址=該單元的絕對(duì)地址。
? 2.順序存儲(chǔ)結(jié)構(gòu)下的線性表的基本操作:
? ? ? 是針對(duì)順序表的操作,不是針對(duì)順序表所在的數(shù)組的操作,所以,其中涉及到的表述為第i個(gè)元素或第i個(gè)位置中的i,均表示順序表的元素序號(hào)。
? ? (1)構(gòu)造函數(shù)
? ? ? ? 有參構(gòu)造函數(shù)創(chuàng)建長度為n的順序表時(shí),需檢驗(yàn)n是否合法;線性表是存儲(chǔ)在數(shù)組中的,所以,n應(yīng)當(dāng)滿足n<=Maxside。
? ? ? ? 順序表的定義中定義有線性表的長度length,成功創(chuàng)建完線性表,應(yīng)將n的值賦給length。
? ? (2)查找操作
? ? ? ? ? 按位查找:需判斷位置i是否超過線性表的長度length,且i不能小于0
? ? ? ? ? 按值查找:若找到需返回序號(hào),注意序號(hào)與下標(biāo)的對(duì)應(yīng)關(guān)系
? ? ? (3)插入操作
? ? ? ? ? 在第i個(gè)位置插入一個(gè)新元素x,若插入成功,則線性表長度+1;
? ? ? ? ? 首先找到插入位置:若位置不合理,則拋出異常;(1<=i<=length+1)
? ? ? ? ? 找到插入位置后,第i個(gè)位置及其后位置的所有元素均后移一位(共有n-i+1個(gè)元素需后移)注意移動(dòng)的先后次序。
? ? ? ? ? 插入前需判斷的兩點(diǎn): 是否表滿,位置是否合理。
? ? ? (4) 刪除操作
? ? ? ? ? ? 判斷位置是否合理;
? ? ? ? ? ? 與插入操作相比,刪除操作中的第i個(gè)元素不需要前移(共有n-i個(gè)元素需前移);