增序順序儲存線性表的基本操作

2021-07-05 04:55:32 字數 1994 閱讀 7006

本文實現了順序儲存結構線性表的基本操作,可能存在一些bug。

1、將長度初始化為零

2、設定乙個預設的大小,用於實現動態擴充

3、動態分配一塊記憶體

1、判斷位置是否正確

2、若正確返回right,注意,陣列的下標是從0開始的

由於是直接取值,所以是時間複雜度為o(1)。

遍歷陣列,若找到返回位置,否則為error

時間主要耗費在元素的比較上,設pi為查詢第i個元素的概率,ci為找到第i個資料元素時已經比較過的次數,則平均查詢長度為pi*ci

假設每個元素的查詢概率相等,則pi=1/n

則平均查詢長度為∑pici (i=1,2,3,…,n)=(n+1)/2

所以平均複雜度為o(2)

1、判斷位置是否合法

2、將長度加一

3、若長度大於該順序表的大小,則重新申請一塊記憶體,大小為原順序表的兩倍,將原順序表拷貝到新的順序表中

4、將插入位置的元素依次向後移動一位

5、在插入位置插入元素

e=∑pi*(n-i+1)(i=1->n+1)

pi為在第i個元素之前插入的概率,n-i+1為需要移動的元素個數

假設在任何位置插入元素的概率相等,則pi=1/(n+1)

則e=1/(n+1)*∑(n-i+1)(i=1->n+1)=n/2

所以平均複雜度為o(n)

1、判斷位置是否合法

2、將刪除位置的元素以此向前移動

3、長度減一

e=∑pi*(n-i)

pi為在第i個元素之前插入的概率,n-i為需要移動的元素個數

假設在任何位置插入元素的概率相等,則pi=1/n

則e=1/n*∑(n-i)(i=1->n+1)=(n-1)/2

所以平均複雜度為o(n)

1、長度加一

2、若長度大於該順序表的大小,則重新申請一塊記憶體,大小為原順序表的兩倍,將原順序表拷貝到新的順序表中

3、在尾部新增乙個元素

#include 

#include

#define fsize 5

using

namespace

std;

class mylist

;void show(mylist &l)

}int main()

cout

<< "*****輸出測試1*****="

<< endl;

show(l);

cout

<< endl;

for(int i=0;i<12;i++)

return0;}

//****************************************===

mylist::mylist()

mylist::mylist(int l)

mylist::~mylist()

bool mylist::add(int e)

a[length-1]=e;

for(int i=length-1;i>0&&a[i]1];i--)

return

true;

}bool mylist::delete(int p)

else

--length;

return

true;

}}bool mylist::isempty()

bool mylist::find(int e,int &p)

}return

false;

}bool mylist::getitem(int e,int &p)

else

}int mylist::getlength()

申請記憶體與釋放記憶體的正確開啟方式

int *a;

a=new

int[10];//a=new int(10)錯誤

delete a;

線性表順序儲存基本操作

線性表的基本操作 status,自定義的乙個列舉型別,enum status status list init sqlistptr l 初始化線性表 void list clear sqlistptr l 清空線性表 void list destory sqlistptr l 銷毀線性表 bool ...

線性表順序儲存的基本操作

線性表的操作主要包括如下幾個 初始化,插入,刪除,查詢 單個元素所在的位置,某個位置的具體元素,查詢所有的元素 判斷是否為空,兩個線性表合併 當需要對線性表進行修改的時候,要傳遞線性表變數的位址。否則的話,只需要傳遞傳遞變數即可 至於原因 想想當初自定義函式中對兩個元素進行交換的實現 include...

線性表順序儲存結構基本操作

線性表 線性表 list 每個元素型別均為datatype。operation initlist l 初始化操作,建立乙個空的線性表l。listempty l 若線性表為空,返回 true 否則返回 false。clearlist l 將線性表清空。getelem l,i,e 將線性表 l中的第 i...