日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

2.2线性表的顺序表

發布時間:2025/3/8 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2.2线性表的顺序表 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2.2.1線性表的順序表示和實現------順序映像

【順序存儲】在【查找時】的時間復雜度為【O(1)】,因為它的地址是連續的,只要知道首元素的地址,根據下標可以很快找到指定位置的元素
【插入和刪除】操作由于可能要在插入前或刪除后對元素進行移動,所以順序存儲的時間復雜度為【O(n)】。

1)初始化操作
思想:構造一個空表
設置表起始位置、表長及可用空間

#define LIST_INIT_SIZE 100 #define LISTINCREAMENT 10 typedef struct { ElemType *elem; //定義個地址變量,使其后面能指向線性表占用的數組空間 int length; // 線性表的長度 int listsize; // 當前分配的存儲容量 }SqList;//初始化操作 Status InitList_Sq(SqList &L) //初始化 { //構造一個空表 L.elem=(ElemType)malloc(LIST_INIT_SIZE*size of(ElemType)); if(!L.elem) exit(OVERFLOW); //存儲分配失敗 L.length=0; //空表長度為0 L.listsize=LIST_INIT_SIZE; //初始存儲容量 return OK;}

2.2.3順序表的插入

2)順序插入操作

目的:在線性表L第i個元素前插入一個元素e

【基本思想
1)判斷i是否在允許范圍
2)存儲空間是否已滿
3)將第i個元素和后面的所有元素向后移動
4)新元素寫在空出的第i個位置
5)線性表長度加1

【注意】
長度為n的順序表第i個位置插入移動n-i+1個元素

Status ListInsert_Sq(SqList&L,int i,ElemType e){if(i<1||i>1.lenth+1) return ERROR; //插入位置不合法if(L.length>=L.listsize) {} //判斷空間足夠q=&(L.elem[i-1]); //q指向插入位置for(p=&(L.elem[L.elem-1]);p>-q;--q) *(p+1)=*p; *q=e; ++L.length; return OK; }

2.2.4順序表的刪除和插入

【基本思路
1)判斷i是否在允許范圍
2)將線性表的第i個元素給e
3)將第i個元素和后面的所有元素向前移動一個位置
4)線性表長度減1

Status ListDelete_Sq(SqList&L,int i,ElemType e){//刪除第i個元素并用e返回值if(i<1||i>1.lenth+1) return ERROR; //刪除位置不合法p=&(L.elem[i-1]); //q指向插入位置 e=*p; q=L.elem+L.length-1; //表尾元素位置 for(++p;p<=q;++p) *(p-1)=*p; //p-1指向p--L.length; return OK; }

【圖】:平均移動次數

【查找操作】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线性表的顺序表的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。