2.2线性表的顺序表
生活随笔
收集整理的這篇文章主要介紹了
2.2线性表的顺序表
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
2.2.1線性表的順序表示和實現------順序映像
【順序存儲】在【查找時】的時間復雜度為【O(1)】,因為它的地址是連續的,只要知道首元素的地址,根據下標可以很快找到指定位置的元素
【插入和刪除】操作由于可能要在插入前或刪除后對元素進行移動,所以順序存儲的時間復雜度為【O(n)】。
1)初始化操作
思想:構造一個空表
設置表起始位置、表長及可用空間
2.2.3順序表的插入
2)順序插入操作
目的:在線性表L第i個元素前插入一個元素e
【基本思想
1)判斷i是否在允許范圍
2)存儲空間是否已滿
3)將第i個元素和后面的所有元素向后移動
4)新元素寫在空出的第i個位置
5)線性表長度加1
【注意】
長度為n的順序表第i個位置插入移動n-i+1個元素
2.2.4順序表的刪除和插入
【基本思路
1)判斷i是否在允許范圍
2)將線性表的第i個元素給e
3)將第i個元素和后面的所有元素向前移動一個位置
4)線性表長度減1
【圖】:平均移動次數
【查找操作】11:42
int LocateElem_Sq(SqList,ElseType e) { //查詢第一個 滿足條件的元素,若存在,返回位序,否則返回0; int i; i=1; while (i<=L.length&&L.elem[i-1]!=e) ++i; if(i<=L.length) return i; else return 0; }// locateElem_Sqi<=L.length&&L.elem[i-1]!=e i>L.length【順序結構優缺點14:15
【優點:
邏輯相鄰,物理相鄰
可隨機存取一元素
存儲空間使用緊湊
【缺點:
插入,刪除需要移動大量元素
預先分配空間需按最大空間分配,利用不充分表難以擴充
【】線性表的合并問題
【圖:例1】
基本思路:
1)初始化Lc為空表
2)分別從La和Lb取得當前元素ai和bi
3)若ai<bj,則將ai插入到Lc中,否則
bj插入到Lc中
代碼:
Viod MergeList(SqList La,SqList lb,SqList &Lc) { Pa=La,elem; Pb=Lb.elem; Lc.listsize=Lc.length=La,elem+Lb.elem; Pc=Lc.elem=(ElemType*)malloc(Lc.listsize*sizeof(ElemType)); if(!Lc.elem) exit(overflow); Pa_last=La.elem+La.length-1; Pb_last=Lb.elem+Lb.length-1; while(pa<=pa_last&&pb<=pb_last) { if(*pa<=*pb) *pc++=*pa++; else *pa++=*pb++; } while(pa<=pa_last) *pa++=*pa++; while (pb<=pb_last) *pc++=*pb++; }總結
以上是生活随笔為你收集整理的2.2线性表的顺序表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 从蓝色养生坊购买的产地甘肃的牡丹花蕊是干
- 下一篇: 新疆烧烤都在哪里?