資料結構 線性表 順序表 插入以及擴充套件

2021-08-18 03:56:40 字數 2334 閱讀 9583

順序表是線性表的順序儲存結構形勢:

1.線性表是邏輯結構,表示元素之間的一一對應相鄰關係,順序表儲存結構,指用連續的儲存單元依次儲存線性表中表的資料元素;

3.順序表通常使用一維陣列來實現,分為靜態和動態分配,靜態分配時空間大小一開始分配好、固定的,動態分配動態調整、主動適應;、

4.順序表支援隨機訪問——只需要通過首位址以及元素編號就可以查詢置頂元素;

5.順序表的插入、刪除操作會需要移動大量的元素。

順序表的構造:

typedef struct vector  vector;

void init(vector *vector, int size)

void clear(vector *vector)

插入操作:1. 判斷插入位置是否合法。

2. 判斷順序表是否已滿。

3. 將目標位置及之後的元素後移一位。

4. 將待插入的元素值插入到目標位置。

插入元素時,插入位置之後的元素都依次向後移動一位:

最後得到插入新元素後的順序表:

由於在位置i處插入元素時,移動n-i個元素,平均移動

int insert(vector *vector, int loc, int value) 

if(vector->length >= vector-> size)

for(int i = vector->length; i > loc; i--)

vector->data[loc] = value;

vector->length++;

return ok;

}

擴大左後:

(當插入遇到表滿時,應考慮到給其擴容完成插入如操作)

1. 將原來的元素儲存到臨時儲存空間。

2. 擴大原來的儲存空間。

3. 將臨時儲存空間裡的資料元素複製到新的儲存空間裡。

4. 釋放臨時的儲存空間。

當繼續想在下表中插入數字7:

把元素儲存在臨時的空間中,將原來的空間擴大兩倍:

把所有的元素複製到新的空間中,並且清空臨時空間:

接著繼續插入元素:

擴容的時間複雜度為:o(n)

void expand(vector *vector) 

free(old_data);

}

例子:

#include #include #define error 0

#define ok 1

typedef struct vector vector;

void init(vector *vector, int size)

void expand(vector *vector)

free(old_data);

printf("expand\n");

}int insert(vector *vector, int location, int value)

if(vector->length >= vector->size)

for(int i = vector->length; i > location; i--)

vector->data[location] = value;

vector->length++;

printf("success\n");

return ok;

}void clear(vector *vector)

int main()

return 0;

}

資料結構 線性表 順序表

豐富了前邊的功能,更加完善。include include define list init size 100 線性表儲存空間的初始分配量 define listincrement 10 線性表儲存空間的分配增量 using namespace std const int overflow 2 ty...

資料結構 線性表 順序表

線性表是具有相同特性的資料元素的乙個有限序列。線性表的順序儲存結構是,把線性表中的所有元素按照其邏輯順序依次儲存到從計算機儲存器中指定的儲存位置開始的一塊連續的儲存空間。include include include define maxsize 50 using namespace std 假設l...

資料結構 線性表(順序表)

順序表就是把線性表中的所有元素按照其邏輯順序,依次儲存到從指定的儲存位置開始的一塊連續的儲存空間中。這樣線性表中第乙個元素的儲存位置就是指定的儲存位置,第i 1個元素的儲存位置緊接在第i個元素的儲存位置的後面。順序表就像如下圖中的房子,每個房間左邊的數字就是該房間離0點的距離,同時也代表了房間號,房...