線性表的邏輯定義
線性表(linear list)是由n(n≥0)個數(shù)據(jù)元素(結(jié)點)a1,a2,…,an組成的有限序列。
① 數(shù)據(jù)元素的個數(shù)n定義為表的長度(n=0時稱為空表)。
?、?將非空的線性表(n>0)記作:(a1,a2,…,an)
?、?數(shù)據(jù)元素ai(1≤i≤n)只是個抽象符號,其具體含義在不同情況下可以不同。
【例1】英文字母表(a,b,…,z)是線性表,表中每個字母是一個數(shù)據(jù)元素(結(jié)點)
【例2】一副撲克牌的點數(shù)(2,3,…,10,j,q,k,a)也是一個線性表,其中數(shù)據(jù)元素是每張牌的點數(shù)
【例3】學生成績表(見概論中表1.1)中,每個學生及其成績是一個數(shù)據(jù)元素,其中數(shù)據(jù)元素由學號、姓名、各科成績及平均成績等數(shù)據(jù)項組成。
線性表的邏輯結(jié)構(gòu)特征
對于非空的線性表:
?、?有且僅有一個開始結(jié)點a1,沒有直接前趨,有且僅有一個直接后繼a2;
② 有且僅有一個終結(jié)結(jié)點an,沒有直接后繼,有且僅有一個直接前趨an-1;
?、?其余的內(nèi)部結(jié)點ai(2≤i≤n-1)都有且僅有一個直接前趨ai-1和一個ai+1。常見的線性表的基本運算
1. initlist(l)
構(gòu)造一個空的線性表l,即表的初始化。
2. listlength(l)
求線性表l中的結(jié)點個數(shù),即求表長。
3. getnode(l,i)
取線性表l中的第i個結(jié)點,這里要求1≤i≤listlength(l)
4. locatenode(l,x)
在l中查找值為x 的結(jié)點,并返回該結(jié)點在l中的位置。若l中有多個結(jié)點的值和x 相同,則返回首次找到的結(jié)點位置;若l中沒有結(jié)點的值為x ,則返回一個特殊值表示查找失敗。
5. insertlist(l,x,i)
在線性表l的第i個位置上插入一個值為x 的新結(jié)點,使得原編號為i,i+1,…,n的結(jié)點變?yōu)榫幪枮閕+1,i+2,…,n+1的結(jié)點。這里1≤i≤n+1,而n是原表l的長度。插入后,表l的長度加1。
6. deletelist(l,i)
刪除線性表l的第i個結(jié)點,使得原編號為i+1,i+2,…,n的結(jié)點變成編號為i,i+1,…,n-1的結(jié)點。這里1≤i≤n,而n是原表l的長度。刪除后表l的長度減1。
注意:
以上所提及的運算是邏輯結(jié)構(gòu)上定義的運算。只要給出這些運算的功能是"做什么",至于"如何做"等實現(xiàn)細節(jié),只有待確定了存儲結(jié)構(gòu)之后才考慮。
組合基本運算,實現(xiàn)復(fù)雜運算
對于實際問題中涉及的其它更為復(fù)雜的運算,可以用基本運算的組合來實現(xiàn)。
線性表(linear list)是由n(n≥0)個數(shù)據(jù)元素(結(jié)點)a1,a2,…,an組成的有限序列。
① 數(shù)據(jù)元素的個數(shù)n定義為表的長度(n=0時稱為空表)。
?、?將非空的線性表(n>0)記作:(a1,a2,…,an)
?、?數(shù)據(jù)元素ai(1≤i≤n)只是個抽象符號,其具體含義在不同情況下可以不同。
【例1】英文字母表(a,b,…,z)是線性表,表中每個字母是一個數(shù)據(jù)元素(結(jié)點)
【例2】一副撲克牌的點數(shù)(2,3,…,10,j,q,k,a)也是一個線性表,其中數(shù)據(jù)元素是每張牌的點數(shù)
【例3】學生成績表(見概論中表1.1)中,每個學生及其成績是一個數(shù)據(jù)元素,其中數(shù)據(jù)元素由學號、姓名、各科成績及平均成績等數(shù)據(jù)項組成。
線性表的邏輯結(jié)構(gòu)特征
對于非空的線性表:
?、?有且僅有一個開始結(jié)點a1,沒有直接前趨,有且僅有一個直接后繼a2;
② 有且僅有一個終結(jié)結(jié)點an,沒有直接后繼,有且僅有一個直接前趨an-1;
?、?其余的內(nèi)部結(jié)點ai(2≤i≤n-1)都有且僅有一個直接前趨ai-1和一個ai+1。常見的線性表的基本運算
1. initlist(l)
構(gòu)造一個空的線性表l,即表的初始化。
2. listlength(l)
求線性表l中的結(jié)點個數(shù),即求表長。
3. getnode(l,i)
取線性表l中的第i個結(jié)點,這里要求1≤i≤listlength(l)
4. locatenode(l,x)
在l中查找值為x 的結(jié)點,并返回該結(jié)點在l中的位置。若l中有多個結(jié)點的值和x 相同,則返回首次找到的結(jié)點位置;若l中沒有結(jié)點的值為x ,則返回一個特殊值表示查找失敗。
5. insertlist(l,x,i)
在線性表l的第i個位置上插入一個值為x 的新結(jié)點,使得原編號為i,i+1,…,n的結(jié)點變?yōu)榫幪枮閕+1,i+2,…,n+1的結(jié)點。這里1≤i≤n+1,而n是原表l的長度。插入后,表l的長度加1。
6. deletelist(l,i)
刪除線性表l的第i個結(jié)點,使得原編號為i+1,i+2,…,n的結(jié)點變成編號為i,i+1,…,n-1的結(jié)點。這里1≤i≤n,而n是原表l的長度。刪除后表l的長度減1。
注意:
以上所提及的運算是邏輯結(jié)構(gòu)上定義的運算。只要給出這些運算的功能是"做什么",至于"如何做"等實現(xiàn)細節(jié),只有待確定了存儲結(jié)構(gòu)之后才考慮。
組合基本運算,實現(xiàn)復(fù)雜運算
對于實際問題中涉及的其它更為復(fù)雜的運算,可以用基本運算的組合來實現(xiàn)。