資料結構順序表的查詢 資料結構 2 1順序表

2021-10-18 04:50:47 字數 3248 閱讀 2694

線性結構是資料結構中最基礎、最簡單的一種資料結構型別,其中最典型的就是線性表

具有「相同特性」的資料元素的「有限序列」

相同特性

所有元素屬於同一資料型別

有限資料元素個數是有限的

序列資料元素由邏輯序號唯一確定

用邏輯序號來確定的特性使得線性表中可以有多個相同值的元素

線性表中所含元素的個數叫做線性表的長度,用n表示(n≥ 0)

n= 0時,表示線性表是乙個空表,即表中不包含任何元素

線性表的邏輯表示為:

表示第個元素為邏輯位序初始化線性表:構造乙個空的線性表l建立線性表

銷毀線性表:釋放線性表l占用的記憶體空間

判線性表是否為空表:若為空返回1,不為空返回0求線性表的長度:返回元素個數n輸出線性表:當線性表l不為空時,順序輸出l的每乙個元素

求線性表l中指定位置的某個資料元素:用e返回l中第i個元素的值

定位查詢:返回l中第乙個與e相等的邏輯位序

插入乙個資料元素:在l的第i個元素之前插入新的元素el的長度+1刪除資料元素:刪除l的第i個元素,並用e返回其值,l的長度-1把線性表中所有的元素按照順序的方法進行儲存。所有元素按邏輯順序依次儲存到儲存器中「一片連續的儲存空間」

#define maxsize 100

typedef int elemtype;

typedef struct sqlist;

初始化線性表

void initlist(sqlist** l) 

建立線性表

void createlist(sqlist* l, elemtype a, int n) 

l->length = n;

}

銷毀線性表

void destroylist(sqlist* l) 

判斷是否為空表

int listempty(sqlist* l) 

求線性表的長度

int listlength(sqlist* l) 

當線性表不為空時,順序顯示l中各元素的值

void displist(sqlist* l) 

for (i = 0; i length; i++) 

printf("\n");

}

求某個資料元素值

int getelem(sqlist* l, int i, elemtype* e) 

*e = l->data[i - 1]; //物理位序 = 邏輯位序 + 1

return true;

}

getelem()的時間複雜度為o(1)。體現了順序表的「隨機訪問特性」

按元素值查詢

int locateelem(sqlist* l, elemtype e) 

if (i >= l->length) 

else 

}

插入資料元素

在插入之前,已有的元素要給新來的元素騰出空間,後面的元素都要向表尾移動一位。最後表的長度+1

}線性表中有n+1個可以插入元素的地方,在插入元素ai時,若為等概率情況,則

此時需要將aian的元素均向後移動乙個位置,共移動n-i+1個元素

所以在長度為n的線性表中插入乙個元素時所需移動元素的平均次數為

因為插入演算法主要花的時間就在移動元素上,因此插入演算法的平均時間複雜度為o(n)

刪除元素

用後面的元素覆蓋被刪除元素,同時都向表頭移動。最後「表的長度-1」

}對於本演算法來說,元素移動的次數也與表長length和刪除元素的位置i有關:

此時需要將a(i+1)an的元素均前移乙個位置,共移動n-(i+1)+1=n-i個元素

平均時間複雜度為o(n)

資料結構 順序查詢

5.小結 include include define initsize 10 初始化陣列長度 define elemtype int 順序查詢表型別定義 順序表 動態分配 typedef struct sstable 函式宣告 void inittable sstable st 1.初始化順序表 ...

資料結構25 順序表查詢

四.參考資料 順序查詢又叫線性查詢,是最基本的查詢技術,它的查詢過程 從表中第乙個 或最後乙個 記錄開始,逐個進行記錄的關鍵字和給定值比較,若找到則查詢成功,如果直到最後乙個 或者第乙個 記錄,都未找到,則表中沒有所查詢的資料,查詢失敗 1.基本演算法 include 順序查詢,a為查詢的陣列 陣列...

資料結構 之順序表查詢

總結順序查詢又叫線性查詢,是最基本的查詢技術,他的查詢過程是 從表中第乙個 或最後乙個 記錄開始,逐個進行記錄的關鍵字和給定值比較,若記錄的關鍵字和給定值相等,則查詢成功,找到所查的記錄 如果直到最後乙個 或第乙個 記錄,其關鍵字和給定值比較都不等時,則表中沒有所查的記錄,查詢失敗。a為陣列,n為要...