c 實現資料結構順序表的10種基本操作

2021-10-10 04:00:00 字數 2955 閱讀 2848

初始化順序表, 建立順序表,增加順序表的空間,取值,查詢操作-按值查詢,插入,刪除,求表長,判空,合併有序(遞增)順序表,輸出順序表

隨機訪問,只要o(1)的時間就可以取出第i 個元素

需要預先分配最大空間,空間過大會造成浪費,插入和刪除操作需要移動大量元素

#ifndef shunxubiao_h

#define shunxubiao_h

#endif

#include

#include

using

namespace std;

#define initsize 10

int maxsize;

//這樣定義順序表可移植性,通用性高

typedef

int elemtype;

//int的別名elemtype,二者等價

//elemtype=element type 用「elemtype」代表所有可能的資料型別,簡單明瞭的概括了整體。在演算法中,除特別說明外,規定elemtype的預設是int型

//typedef作用是為一種資料型別定義乙個新名字,這裡的資料型別包括內部資料型別(int,char等)和自定義的資料型別(struct等)

//使用typedef為現有型別建立別名,給變數定義乙個易於記憶且意義明確的新名字。

typedef

struct

sqlist;

//初始化順序表

bool

initlist

(sqlist &l)

//l前加&表示引用型別引數,函式內部的改變跳出函式後仍有效

//不加&則函式內部的改變,在跳出函式後無效

//建立順序表

bool

createlist

(sqlist &l)}}

x=-1

;return

true;}

//增加順序表的空間

void

increase

(sqlist &l,

int newlen)

free

(p);

//釋放原來的空間

}//取值

elemtype getelem

(sqlist &l,

int i)

//使用elemtype 可以是各種型別的函式,不指定具體函式型別,可改性高

//查詢操作-按值查詢:查詢表l中第乙個元素值為e的元素,並返回其位序

intlocateelem

(sqlist &l, elemtype e)

//查詢演算法複雜度:

/*最好情況:查詢一次就找到(即找的是表中第乙個元素)時間複雜度為o(1)

最壞情況:查詢n=l.length次,時間複雜度為o(n)

平均情況:若元素在第乙個位置需要比較1次,在第二個位置需要比較2次,在第i 個位置需要比較i 次,則平均時間複雜度=pi*i(從1到n求和)pi是查詢概率

若查詢概率均等則平均時間複雜度為o(n)

*///插入操作:在表l的位序i上插入指定元素e

bool

insertlist

(sqlist &l,

int i, elemtype e)

/*插入演算法複雜度

在第i 個位置插入,則從第i個元素到第n個元素都要後移,則需要移動n-i+1 ;有n+1種插入情況:從第乙個插入到插入到第n+1位置

平均時間複雜度=pi*(n-i+1)(從1到n+1求和)pi是每個位置插入的概率 ,若插入概率均等則平均時間複雜度為 o(n) */

//刪除操作:刪除表中位序為i的元素,並用e返回刪除元素的值

bool

listdelete

(sqlist &l,

int i, elemtype& e)

e = l.elem[i -1]

;//位序i的元素保留在e中,防止被覆蓋,以後可能有用

for(

int j = i; j < l.length; j++

)//將第i個元素之後的元素前移,從第i+1個元素開始前移

l.elem[j -1]

= l.elem[j]

; l.length--

;//順序表長度-1

return

true;}

/*刪除演算法複雜度

順序表刪除一共有n種情況,每個情況移動元素個數為n-(i+1)+1=n-i(刪除第i 個元素,從第i+1個元素開始移動)

平均時間複雜度=pi*(n-i)(從1到n求和)pi是刪除概率;若刪除概率均等則平均時間複雜度=o(n)

*///求表長

intlength

(sqlist &l)

//判空

bool

empty

(sqlist &l)

else

}//合併有序(遞增)順序表

//不斷從la,lb中取數,比較大小,將較小者放入lc中,一直進行下去,直到把其中乙個順序表la或lb中的數取完為止,若la或lb中仍有多餘,則把多餘的數放入lc表尾

void

mergesqlist

(sqlist &la,sqlist &lb,sqlist &lc)

else

}while

(i=lb.length)

// la有剩餘,將la中剩餘元素放入lc表尾部

while

(j=la.length)

//lb有剩餘,將lb中剩餘元素放入lc表尾部

}//輸出順序表

void

showsqlist

(sqlist &l)

#include

#include

"shunxubiao.h"

using

namespace std;

intmain()

c 實現順序表(資料結構)

pragma once 防止重複編譯 include include using namespace std template class type class seqlist bool isempty const public void push back const type x 尾插 此con...

資料結構 用C 實現順序表

sequence list array 線性表的順序儲存結構,指的是用一段位址連續的儲存單元依次儲存線性表的資料元素 順序表為靜態儲存分配,需要事先確定容量 老師課上提供了乙個class模板,如下 那麼,我們現在可以根據這個模板開始造輪子了。實現思路很簡單,按照上面提供的函式用自己的方法一步步完善就...

資料結構(順序表的實現)

include define max len 100 容器的最大存量 using namespace std 各種資料結構,無非 建構函式 初始化 什麼資料型別 插入 插入的位置和插入的元素 刪除 刪除那個元素 查詢 按值查詢還是按址查詢以及查詢的方向 遍歷 下標遍歷和迭代器遍歷 cout 順序表 ...