模擬動態陣列及其一系列操作

2021-10-03 01:46:57 字數 1729 閱讀 7064

線性表是一種資料結構。在邏輯上,具有除了第乙個結點,其他結點有唯一前驅,除了最後乙個結點,其他結點有唯一後驅的特點。順序表和鏈式表是線性表的兩種實現方式,它們只在儲存方式上有區別,在邏輯上是一致的。

區別在於順序表示使用連續的一段空間來儲存,我們常用的陣列就是線性表的一種順序表示。

陣列是靜態分配記憶體的順序表,靜態分配記憶體導致陣列的大小是固定的,一旦資料超過陣列大小,將會導致資料的溢位。這是我們不想要的,因此還有動態分配記憶體的方式。動態分配記憶體可以防止資料溢位和空間的浪費。

此文在c++環境下編寫,其實除了輸入輸出用到c++的函式,其他完全是c語言。

模擬了動態陣列的初始化,插入,輸出等操作,插入元素的平均時間複雜度o(n),刪除元素的平均時間複雜度o(n),按值查詢的平均時間複雜度o(n),按位查詢的平均時間複雜度o(1)。

目錄

初始化判斷陣列是否為空 or 是否已滿

尾部新增元素 

插入元素 

按位查詢 

按值查詢

刪除元素

求表長列印陣列

typedef int datatype;

struct array;

void init(struct array *arr,int maxsize)

}

bool isfull(struct array *arr)

else return false;

}bool isempty(struct array *arr)

else return false;

}

/*

陣列已滿不能新增返回false,否則在尾部增加元素並返回true

*/ if(isfull(arr))

else

}

函式的引數posi意味著新的元素新增到第posi個元素前。

/*

陣列已滿無法插入返回false

否則插入元素到第posi個前,並返回true

*/bool insertval(datatype newone,int posi,struct array *arr)

else

*(arr->fdata+posi-1)=newone;

arr->length++;

return true;

}}

返回第posi位的元素值

//按位查詢

datatype searchorder(int posi,struct array arr)

按值查詢,返回出現該值的第乙個位置,沒有找到返回-1 

//按值查詢

int searchval(datatype value,struct array arr)

//刪除第posi位的元素

bool deleorder(int posi,struct array *arr)

arr->length--;

return true;

}}

//求表長

int length(struct array arr)

void print(struct array *arr)

cout<}

}

樹狀陣列的一系列操作

1 樹狀陣列求逆序對 include include include using namespace std const int maxn 100010 int n,a maxn b maxn c maxn s maxn int lowbit int x void add int x int get...

關於mysql 一系列操作

這是在linux 的mysql的資料庫操作,備份資料庫 mysqldump u root p cxn usr local backupcxn.sql 引數說明 cxn 代表著我要備份的資料庫名稱,usr local backupcxn.sql代表著備份到usr local下,輩分的名稱叫做backu...

SQL JOIN的一系列操作 嘎 嘎 嘎

誰訂購了產品,並且他們訂購了什麼產品?除了我們在上面的例子中使用的 inner join 內連線 我們還可以使用其他幾種連線。下面列出了您可以使用的 join 型別,以及它們之間的差異。right join 關鍵字會右表 table name2 那裡返回所有的行,即使在左表 table name1 ...