資料結構 順序表

2021-09-18 07:09:55 字數 3041 閱讀 9692

順序表是用一段實體地址連續的儲存單元依次儲存資料元素的線性結構,一般情況下採用陣列儲存。在陣列上完成資料的增刪查改。

順序表分為靜態順序表動態順序表

使用長度給定的陣列儲存資料,結構體如下:

typedef struct seqlist seqlist;
動態開闢的陣列來儲存資料,其大小可以改變,結構體如下:

//自行定義乙個資料型別

typedef int sldatatype;

typedef struct seqlist seqlist;

void seqlistinit(seqlist* pseqlist)
void seqlistdestroy(seqlist* pseqlist)
敲黑板!!!

以下操作預設初始建立的順序表容量已經滿足需要!!!

對於容量不夠的情況還需要另行操作!!!

這是最簡單的插入,只需要將所需插入的資料放到最後一位,並將 順序表的(size)有效資料個數+1即可。

void seqlistpushback(seqlist* pseqlist, sldatatype value)
想要在起始位置插入資料,就必須將裡面的資料都向後移動,直到所有的資料都統一向後移動一位後,才可以將資料放在起始位置,而且必須從最後一位開始移動,不然會有資料在移動過程中被覆蓋。

void seqlistpushfront(seqlist* pseqlist, sldatatype value) 

pseqlist->array[0] = value;

pseqlist->size++;

}

這裡要用到在頭插中所用到的思想,想要在指定位置插入,就必須將該位置即該位置之後的資料,統一向後移動一位,方可插入,也必須從最後一位開始移動!不然會有資料被覆蓋。

void seqlistpushinsert(seqlist* pseqlist, int pos, sldatatype value) 

pseqlist->array[pos] = value;

pseqlist->size++;

}

==首先斷言!當前的順序表是否為空!==直接將最後乙個資料刪除,並將有效資料個數(size)- 1,即可;

void seqlistpopback(seqlist* pseqlist)
首先斷言!當前的順序表是否為空! 將 array[0] 刪除後,還需要將後面的資料乙個乙個的向前搬移,這裡要注意的是,需要從 array[1]開始向前搬,一直到最後乙個搬運結束。

void seqlistpopfront(seqlist* pseqlist) 

pseqlist->size--;

}

首先斷言!當前的順序表是否為空! 先找到要刪除的位值,然後做法和頭刪類似!

void seqlistpopinsert(seqlist* pseqlist, int pos) 

pseqlist->size--;

}

遍歷整個陣列,如果找到了就返回陣列下標,沒找到就返回 -1;

int seqlistsearch(const seqlist* pseqlise, sldatatype value) 

} cur++;

return -1;

}

首先需要斷言!1、pos的值是否大於零! 2、pos的值是否小於順序表的有效資料個數!

int seqlistmodify(seqlist* pseqlist, int pos, sldatatype value)
遍歷整個順序表,只要找到第乙個值為 data 的資料,就將它刪除,並返回;如果遍歷整個順序表都沒有找到,就返回 -1;

void seqlistremove(seqlist* pseqlist, sldatatype data) 

} return -1;

}

遍歷整個順序表,只要遇見值為 data 的資料都進行刪除。

void seqlistremoveall(seqlist* pseqlist, sldatatype data) 

} return 1;

}

在進行插入相關的運算過程中,第一步就需要檢查當前的順序表的容量大小是否夠用,如果不夠用則需要進行擴容。

擴容的基本思想是,在記憶體中申請一塊空間,大小是原來順序表大小的2倍,然後將原來順序表中的所有資料都搬移過去,然後再進行其他的相關操作!

在每一次的插入相關操作過程中,都需要首先進行判斷!

static void checkcapacity(seqlist* pseqlist) 

//擴容

//1、建立新的空間

int newcapacity = 2 * pseqlist->capacity;

sldatatype* newarray =

(sldatatype*)malloc(sizeof(pseqlist->array) * 2);

//2、搬家

int cur = 0;

for (; cur >= pseqlist->size; cur++)

//3、釋放老空間、繫結新空間

free(pseqlist->array);

pseqlist->array = newarray;

pseqlist->capacity = newcapacity;

}

空間連續,支援隨機訪問!

1、中間或前面的部分的插入過程時間複雜度均為 o(n);

2、擴容的代價太大;

資料結構 順序表

順序表的特徵 1由唯一的表名標識 2佔據一塊連續的儲存空間 3資料順序存放,元素之間有先後關係 定義動態的順序表 define maxsize 100 typedef struct sqlist 這個結構體型別存放的是順序表的資訊和順序表的資料 初始化順序表 void initsqlist sqli...

資料結構 順序表

順序表示最簡單的乙個資料結構,直接貼 吧,因為比較簡單。include include typedef struct sqlist sqlist void initlist sqlist l l length 0 void getelem sqlist l 初始化 l length j printf...

資料結構順序表

include include include include include include include include include include include include include include using namespace std define maxn 100000...