實現對順序表的增刪查改

2021-10-04 04:51:37 字數 2823 閱讀 4570

線性表(連續儲存)

線性表是n個具有相同特性的資料元素的有限序列. 線性表是一種在實際中廣泛使用的資料結構,

常見的線性表:順序表, 鍊錶, 棧, 佇列, 字串…

線性表在邏輯上是線性結構, 也就是說是連續的一條直線, 但是在物理結構上並不一定是連續的,

線性表在物理上儲存時, 通常以陣列和鏈式結構的形式儲存

順序表(以陣列的形式來存放, 一種是定長的(靜態順序表), 一種是不定長的(動態順序表)

順序表是用一段實體地址連續的儲存單元依次儲存資料元素的線性結構,

一般情況採用陣列儲存, 在陣列上完成資料的增刪查改

當你在定義順序表時, 他的大小長度就確定了, 就是定長順序表, 一般他的元素是放在棧上, (能儲存的元素不多)

使用動態開闢的陣列儲存就是動態順序表.(使用多)動態調整滿足對大量資料的儲存 堆上儲存

順序表總共能儲存多少元素就是容量, 但是容量跟元素個數是不同的,

順序表支援訪問 但不適合在中間插入元素等 增容代價大

他的結構用結構體來定義 定義乙個結構體來描述當前順序表的結構

對鍊錶的使用情況:**

進行頻繁的插入或刪除時是不用順序表的 用鍊錶(效率高), 而順序表:(支援隨機訪問(一次可以跳到任意位置) 適合尾插,

尾插:時間複雜度為o(1), 不需要移動元素

除過尾插,其他任意(包括頭插)位置插入都是o(n), 需要把已經存在的元素向後移動)

需要檢查容量, 如果空間已滿, 需要增容, 增容代價大

刪除:(適合尾刪 其他效能低)

並不需要釋放空間, 只需要覆蓋原有位置的值即可

除過尾刪的時間複雜度為 o(1), 其他都需要移動元素 所以時間複雜度為o(n)

而且刪除不需要增容

#include

#include

#include

typedef

int datatype;

//型別別名 若資料型別為float, double 就替換int

// 動態順序表

typedef

struct seqlist seqlist;

// 別名

// 列印

void

printseqlist

(seqlist* sq)

printf

("\n");

}// 順序表初始化

void

seqinit

(seqlist* sq)

// 檢查容量 增容

void

checkcapacity

(seqlist* sq)

}// 操作介面: 增刪查改

// 插入介面(三個成員: 指標_data, 當前個數_size, 容量_capacity)

// 任意位置([0,size]插入元素(以及指定的位置)

// 從position後的元素都要向後移動

void

seqinsert

(seqlist* sq, size_t position, datatype value)

// 插入

sq->_data[position]

= value;

++sq->_size;

}// 頭插(傳當前的資料表, 以及要插入的值)

// 把所有的元素向後移動, 再插入

void

seqpushfront

(seqlist* sq, datatype value)

// 從後往前移動 不能是i>=0 :1. 死迴圈, 2. 訪問越界 非負數是不可能小於0的,

for(size_t i = sq->_size; i >0;

--i)

// 插入

sq->_data[0]

= value;

++sq->_size;

// seqinsert(sq, 0, value);

}// 尾插

// 相當於陣列指標(頭指標)向後偏移_size個位置,把新的元素放進去, 然後元素個數加1(_size++)

void

seqpushback

(seqlist* sq, datatype value)

// 刪除介面 訪問到的區間只有[0,size-1]

// 刪除並不是去釋放空間, 不能把空間還給系統(要還空間也是把整塊空間還給系統,不能只把空間的某一位置還給系統),

// 順序表刪除不是釋放空間, 而是把後面的元素整體向前移動乙個位置覆蓋要刪除的元素, 容量是不變的,--_size

// 任意位置刪除(把該位置的資料覆蓋即可)

void

seqerase

(seqlist* sq, size_t position)

--sq->_size;

}// 頭刪

void

popfront

(seqlist* sq)

//尾刪

void

popback

(seqlist* sq)

// 查詢介面(無符號查詢 返回的都是非負數的位置)

size_t seqfind

(seqlist* sq, datatype value)

return-1

;// 如果找不到這個值 返回最大值

}// 測試函式

void

test()

void

test2()

intmain()

實現順序表的增刪查改

線性表分為兩種 順序表 順序儲存 和鍊錶 鏈式儲存 這裡實現一下順序表管理資料的增刪查改操作 標頭檔案自定義標頭檔案中一般存放自定義函式的函式宣告 sqlist.h pragma once include include include typedef int sqldatatype typedef...

順序表的增刪查改

今天來實現簡單的順序表地增刪查詢操作 1.在開始敲 前,首先要明確自己要幹嘛。2.然後開始構思自己所要實現什麼樣的功能。3.之後將之前構思的功能弄好框架。4.最後再將每個框架的內容補充上。標頭檔案 include pragma once include typedef int sldatatype ...

順序表的增刪查改

順序表實現 順序表是用一段實體地址連續的儲存單元依次儲存的線性結構,一般情況下採用陣列儲存。在陣列上完成資料的增刪查改。靜態順序表 使用定長陣列儲存 動態順序表 使用動態開闢的陣列儲存 靜態順序表適用於確定知道需要存多少資料的場景。靜態順序表的定長陣列導致n定大了,空間開多了浪費,開少了不夠用。首先...