本文實現了順序儲存結構線性表的基本操作,可能存在一些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...