線性結構是資料結構中最基礎、最簡單的一種資料結構型別,其中最典型的就是線性表
具有「相同特性」的資料元素的「有限序列」
相同特性
所有元素屬於同一資料型別
有限資料元素個數是有限的
序列資料元素由邏輯序號唯一確定
❝線性表中所含元素的個數叫做線性表的長度,用用邏輯序號來確定的特性使得線性表中可以有多個相同值的元素
❞
n
表示(n
≥ 0)
當n
= 0時,表示線性表是乙個空表,即表中不包含任何元素
線性表的邏輯表示為:
表示第個元素為邏輯位序初始化線性表:構造乙個空的線性表l
建立線性表
銷毀線性表:釋放線性表l
占用的記憶體空間
判線性表是否為空表:若為空返回1
,不為空返回0
求線性表的長度:返回元素個數n
輸出線性表:當線性表l
不為空時,順序輸出l
的每乙個元素
求線性表l
中指定位置的某個資料元素:用e
返回l
中第i
個元素的值
定位查詢:返回l
中第乙個與e
相等的邏輯位序
插入乙個資料元素:在l
的第i
個元素之前插入新的元素e
,l
的長度+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
時,若為等概率情況,則
此時需要將ai
到an
的元素均向後移動乙個位置,共移動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為要...