線性表是一種資料結構。在邏輯上,具有除了第乙個結點,其他結點有唯一前驅,除了最後乙個結點,其他結點有唯一後驅的特點。順序表和鏈式表是線性表的兩種實現方式,它們只在儲存方式上有區別,在邏輯上是一致的。
區別在於順序表示使用連續的一段空間來儲存,我們常用的陣列就是線性表的一種順序表示。
陣列是靜態分配記憶體的順序表,靜態分配記憶體導致陣列的大小是固定的,一旦資料超過陣列大小,將會導致資料的溢位。這是我們不想要的,因此還有動態分配記憶體的方式。動態分配記憶體可以防止資料溢位和空間的浪費。
此文在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 ...