版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
2023/2/1濱州學(xué)院信息工程系第二章線性表線性表概述、順序表的存儲及基本操作2023/2/12本講內(nèi)容線性表的概念和定義邏輯結(jié)構(gòu)特點基本術(shù)語ADT定義線性表的順序存儲實現(xiàn)順序存儲方法C語言描述類型定義基本操作實現(xiàn)與分析2023/2/13一、線性表的概念和定義線性表的邏輯結(jié)構(gòu)特點線性表的基本術(shù)語ADT定義2023/2/14集合中必存在唯一的一個“第一元素”;集合中必存在唯一的一個“最后元素”;除最后元素在外,每個元素均有唯一的后繼;除第一元素之外,每個元素均有唯一的前驅(qū)。是一個數(shù)據(jù)元素的有序(次序)集。線性表是一種最簡單的線性結(jié)構(gòu),
1.線性表的邏輯結(jié)構(gòu)特點2023/2/152.線性表的基本術(shù)語線性表可描述為n(n≥0)個具有相同特性的數(shù)據(jù)元素組成的有限序列.常表示為:L={a1,…,ai-1,ai,ai+1,…,an}
ai必須具有相同特性,即屬于同一數(shù)據(jù)對象。ai-1是ai的直接前驅(qū)元素,ai+1是ai的直接后繼元素;數(shù)據(jù)元素ai在線性表中有確定的位置i,i稱為位序;線性表中數(shù)據(jù)元素的個數(shù)n稱為線性表的長度,n=0時,線性表稱為空表。2023/2/163.線性表的ADT定義ADTList{數(shù)據(jù)對象:D={ai|ai∈ElemSet,i=1,2,...,n,n≥0}{稱n為線性表的表長;稱n=0時的線性表為空表。}數(shù)據(jù)關(guān)系:R1={<ai-1,ai>|ai-1,ai∈D,i=2,...,n}
{設(shè)線性表為(a1,a2,...,ai,...,an),
稱i為ai
在線性表中的位序。}2023/2/17
結(jié)構(gòu)初始化操作結(jié)構(gòu)銷毀操作引用型操作
加工型操作
}ADTList基本操作:2023/2/18GetElem(L,i,&e)初始條件:
線性表L已存在,且1≤i≤LengthList(L)。操作結(jié)果:
用
e返回L中第i個元素的值。2023/2/19LocateElem(L,e,compare())初始條件:線性表L已存在,e為給定值,compare()是元素判定函數(shù)。操作結(jié)果:返回L中第1個與e滿足關(guān)系compare()的元素的位序。若這樣的元素不存在,則返回值為0。2023/2/110
ListTraverse(L,visit())初始條件:線性表L已存在,visit()為某個訪問函數(shù)。操作結(jié)果:依次對L的每個元素調(diào)用函數(shù)visit()。一旦visit()失敗,則操作失敗。2023/2/111PutElem(&L,i,&e)初始條件:
線性表L已存在,且1≤i≤LengthList(L)。操作結(jié)果:
L中第i個元素賦值同e的值。2023/2/112ListInsert(&L,i,e)初始條件:
線性表L已存在,且1≤i≤LengthList(L)+1操作結(jié)果:
在L的第i個元素之前插入新的元素e,L的長度增1。2023/2/113ListDelete(&L,i,&e)初始條件:
線性表L已存在且非空,
1≤i≤LengthList(L)。操作結(jié)果:刪除L的第i個元素,并用e返回其值,L的長度減1。2023/2/114順序映象(存儲)方式順序表的C語言描述線性表的基本操作在順序表中的實現(xiàn)二、線性表的順序存儲實現(xiàn)—順序表2023/2/1151.順序存儲(映像)方式以x的存儲位置和y的存儲位置之間某種關(guān)系表示邏輯關(guān)系<x,y>。最簡單的一種順序映象方法是:
令y的存儲位置和x的存儲位置相鄰。2023/2/116
用一組地址連續(xù)的存儲單元依次存放線性表中的數(shù)據(jù)元素
a1a2
…ai-1ai
…an線性表的起始地址稱作線性表的基地址2023/2/117以“存儲位置相鄰”表示有序?qū)?lt;ai-1,ai>
即:LOC(ai)=LOC(ai-1)+C
一個數(shù)據(jù)元素所占存儲量↑所有數(shù)據(jù)元素的存儲位置均取決于第一個數(shù)據(jù)元素的存儲位置
LOC(ai)=
LOC(a1)+(i-1)×C
↑基地址2023/2/1182.順序表的C語言描述#defineMAXSIZE100
//線性表存儲空間的分配量,即數(shù)組容量typedefstruct{ElemType
*elem;
//存放線性表的數(shù)組空間基地址int
length;//當(dāng)前長度(實際元素個數(shù))int
listsize;//當(dāng)前分配的容量}SqList;//稱順序表2023/2/119順序表的基本形態(tài)
定義:SqListL;空表L.length==0可插入不可刪除表滿L.length>=L.listsize可刪除不可插入(空間再分配)表不空不滿0<L.length<L.listsize可刪除可插入2023/2/1203.線性表的基本操作在順序表中的實現(xiàn)初始化查找插入元素刪除元素2023/2/121StatusInitList_Sq(SqList&L){
//構(gòu)造一個空的順序表L(初始化)
}
//InitList_Sq算法時間復(fù)雜度:O(1)L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));if(!L.elem)exit(OVERFLOW);L.length=0;L.listsize=LIST_INIT_SIZE;returnOK;2023/2/122
O(n)算法的時間復(fù)雜度:根據(jù)元素值查找位置int
Locate(SqListL,
ElemType
e)
{//在順序表L中查詢第一個等于e的數(shù)據(jù)元素,//若存在,則返回它的位序,否則返回0
i=1;
//i的初值為第1元素的位序for(i<=L.length;i++)if(L.elem[i-1]==e)returni;return0;}//Locate2023/2/123Statussearch_i(SqListL,inti,ElemType&e)
{//在順序表L中查找第i個元素,若存在用e返回其//值并返回OK,否則返回ERRORif(i>0&&i<=L.length){e=L.elem[i-1];returnOK;}elsereturnERROR;}根據(jù)元素位置查詢值2023/2/124線性表插入操作
ListInsert(&L,i,e)的實現(xiàn):分析:插入元素時,線性表的邏輯結(jié)構(gòu)發(fā)生什么變化?(a1,…,ai-1,ai,…,an)改變?yōu)?/p>
(a1,…,
ai-1,e,ai,…,an)<ai-1,ai><ai-1,e>,<e,ai>2023/2/125a1a2
…ai-1ai
…ana1a2
…ai-1
…ai
ean表的長度增加存儲空間(順序表)中的變化:2023/2/126需考慮的問題(步驟)當(dāng)前表是否已滿?輸入(插入位置)是否有效?插入元素2023/2/127
StatusListInsert(SqList&L,inti,ElemTypee)
{
//在順序表L的第i個元素之前插入新的元素e,//i的合法范圍為1≤i≤L.length+1if(L.length>=L.listsize){//空間再分配newbase=(ElemType*)
realloc(L.elem
,(L.listsize+LISTINCREMENT)*sizeof(ElemType));
if(!newbase)exit(OVERFLOW);
L.elem=newbase;
//基地址更新L.listsize+=LISTINCREMENT;//表容量更新}if(i<1||i>L.length+1)returnERROR;
2023/2/128算法時間復(fù)雜度:O(n)for
(j=L.length;j>i;j--)L.elem[j]=L.elem[j-1];
//插入位置及之后的元素右移L.elem[i-1]=e;
//插入e++L.length;
//表長增1returnOK;}//ListInsert_Sq2023/2/129線性表操作
ListDelete(&L,i,&e)的實現(xiàn):分析:刪除元素時,線性表的邏輯結(jié)構(gòu)發(fā)生什么變化?(a1,…,ai-1,ai,ai+1,…,an)改變?yōu)?/p>
(a1,…,
ai-1,ai+1,…,an)<ai-1,ai>,<ai,ai+1><ai-1,ai+1>2023/2/130ai+1…an表的長度減少a1a2
…ai-1ai
ai+1
…ana1a2
…ai-1
存儲空間(順序表)中的變化2023/2/131StatusListDelete_Sq(SqList&L,inti,ElemType&e)
{//在順序表L中刪除第i個元素,以引用參數(shù)e返回其值//若刪除成功返回ok;否則返回ERROR
if(i<1||i>L.length)returnERROR;//i值不合法
e=L.elem[i-1];for(j=i;j<L.length;j++)L.elem[j-1]=L.elem[j];//元素前移--L.length;returnOK;}//ListDelete_Sq算法時間復(fù)雜度:
O(n)2023/2/132順序表操作的效率分析
時間效率分析:
算法時間主要耗費在移動元素的操作上,而移動元素的個數(shù)取決于插入或刪除元素的位置。
注意:以插入為例分析若插入在尾元素之后,則根本無需移動(特別快);若插入在首元素之前,則表中元素全部要后移(特別慢);
2023/2/133
假定在每個元素位置上插入x的可能性都一樣(即概率P相同)則應(yīng)這樣來計算平均執(zhí)行時間:
將所有位置的執(zhí)行時間相加,然后取平均
若在首元素前插入,需要后移n次;若在a1后面插入,要后移n-1個元素;
……
若在an-1后面插入,要后移1個元素;若在尾元素an之后插入,則后移0個元素。推導(dǎo)過程:2023/2/134所有可能的元素移動次數(shù)合計:
0+1+…+n=n(n+1)/2共有多少種插入形式?
——連頭帶尾有n+1種!
故插入時的平均移動次數(shù)為:
n(n+1)/2÷(n+1)=n/2
即插入、刪除算法的平均時間復(fù)雜度為O(n)
推導(dǎo)過程2023/2/135順序表----算法分析算法插入刪除基本操作移動元素移動元素平均移動次數(shù)時間復(fù)雜度O(n)O(n)最好情況在n+1處插入,不需移動
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度企業(yè)招聘預(yù)約解除與人才違約責(zé)任合同
- 臨沂大學(xué)《初級和聲(一)》2023-2024學(xué)年第一學(xué)期期末試卷
- 幼兒園班級管理策略和方法
- 幼兒園防震安全培訓(xùn)內(nèi)容
- 2025年度二零二五年度跨境電商金融貸款服務(wù)合同
- 2025年度智能倉儲廠房租賃及供應(yīng)鏈管理合同
- 蘭考三農(nóng)職業(yè)學(xué)院《中國古代文學(xué)(Ⅱ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 二零二五年度2025年度家政服務(wù)短期工勞務(wù)協(xié)議
- 二零二五年度海鮮活魚線上銷售合作協(xié)議
- 二零二五年度醫(yī)療健康產(chǎn)業(yè)連帶擔(dān)保協(xié)議書
- 2024-2030年中國鋰礦資源行業(yè)供給預(yù)測及發(fā)展前景展望研究報告
- 短視頻剪輯雇傭合同(2024版)
- 五年(2020-2024)高考語文真題分類匯編(全國)專題04 文學(xué)類文本閱讀(散文)(教師卷)
- ISO 22320-2018安全與韌性 應(yīng)急管理 突發(fā)事件管理指南(中文版)
- 2024年工貿(mào)重點企業(yè)有限空間作業(yè)專家指導(dǎo)服務(wù)專題培訓(xùn)
- 冀人版科學(xué)六年級下冊全冊同步練習(xí)
- 初三數(shù)學(xué)-房山區(qū)2023~2024學(xué)年度第一學(xué)期期末檢測試題+答案
- MOOC 軟件工程-東北大學(xué) 中國大學(xué)慕課答案
- 中職思政課實施方案及措施
- 污水管網(wǎng)巡查及養(yǎng)護 投標方案(技術(shù)方案)
- 護理不良事件書寫范文
評論
0/150
提交評論