資料結構 線性表 陣列實現

2021-07-10 08:52:23 字數 3825 閱讀 2733

按照上述抽象描述,定義乙個模板類來描述上述的抽象描述。

templateclass linearlist

bool isempty() const //判斷線性表是否為空

int length() const //線性表長度

bool find(int k, t& x) const; //返回第k個元素到x中

int search(const t& x) const; //返回x所在的位置

linearlist& delete(int k, t& x); //刪除第k個元素並將它返回到x中

linearlist& insert(int k, const t& x); //在第k個元素之後的位置插入x

void output(ostream& out) const; //輸出線性表內容

private:

int maxsize; //線性表可容納最大長度

int length; //線性表中非空的長度

t *element; //線性表陣列頭指標

};

下面依次分析各種操作。

create()建立乙個空線性表,對應的就是類的建構函式操作。建構函式裡面首先要的就是對空間的分配,當然要確定類成員變數的值。

/*

建構函式

*/templatelinearlist::linearlist(int maxlistsize)

destory()操作主要就是對線性表物件分配的堆空間進行**。

~linearlist()								//析構函式

isempty()操作很簡單,就是判斷線性表是否為空。檢查是否為空只需檢查類length的值是否為零。

bool isempty() const 						//判斷線性表是否為空

length()操作就是要返回線性表的所含元素的個數。

int length() const 							//線性表長度

/*

返回第k個元素到x中

*/templatebool linearlist::find(int k, t& x) const

/*

遍歷整個陣列,發現被查詢元素和陣列中元素匹配則返回該元素位置

如果在陣列中沒有發現被查詢元素,則返回-1

*/templateint linearlist::search(const t& x) const

//將第k個元素後的元素依次往前移動乙個位置,覆蓋掉第k個元素

for(int i = k+1; i

insert()是在索引k的後面插入乙個元素,返回當前線性表;需要檢查k是否在可插入的範圍內。重要的是要檢查當前線性表分配的空間是否已經儲存滿了。要注意長度的變化。

/*在第k個元素的後面插入乙個元素

*/templatelinearlist& linearlist::insert(int k, const t& x)

if(length == maxsize)

//將第k個元素後面的元素都往後移動乙個單位

for(int i=length; i>k; --i)

element[k] = x;

length += 1;

return *this;

}

為了使線性表資料視覺化。

/*

輸出線性表內容

*/templatevoid linearlist::output(ostream& out) const

out << endl;

}

tips:模板類的定義和實現要放在乙個檔案裡面,不然會報錯!!.h檔案

#ifndef __linearlist_h__

#define __linearlist_h__

#include using namespace std;

templateclass linearlist

bool isempty() const //判斷線性表是否為空

int length() const //線性表長度

bool find(int k, t& x) const; //返回第k個元素到x中

int search(const t& x) const; //返回x所在的位置

linearlist& delete(int k, t& x); //刪除第k個元素並將它返回到x中

linearlist& insert(int k, const t& x); //在第k個元素之後的位置插入x

void output(ostream& out) const; //輸出線性表內容

private:

int maxsize; //線性表可容納最大長度

int length; //線性表中非空的長度

t *element; //線性表陣列頭指標

};/*

建構函式

*/templatelinearlist::linearlist(int maxlistsize)

/*返回第k個元素到x中

*/templatebool linearlist::find(int k, t& x) const

/*遍歷整個陣列,發現被查詢元素和陣列中元素匹配則返回該元素位置

如果在陣列中沒有發現被查詢元素,則返回-1

*/templateint linearlist::search(const t& x) const

//將第k個元素後的元素依次往前移動乙個位置,覆蓋掉第k個元素

for(int i = k+1; ilinearlist& linearlist::insert(int k, const t& x)

if(length == maxsize)

//將第k個元素後面的元素都往後移動乙個單位

for(int i=length; i>k; --i)

element[k] = x;

length += 1;

return *this;}/*

輸出線性表內容

*/templatevoid linearlist::output(ostream& out) const

out << endl;}/*

過載《運算子

*/template ostream& operator<

#endif // !__linearlist_h__

.c檔案

#include #include "linearlist.h"

using namespace std;

int main()

執行結果:

資料結構 線性表之陣列

什麼叫陣列 陣列 array 是一種線性表資料結構。它是一組連續的記憶體空間,來儲存一組具有相同型別的資料。什麼線性表跟非線性表 線性表 通俗一點就是資料像一條線一樣排成的結構,線性表上的資料只有前後兩個方向,另外像鍊錶,佇列,棧等也是線性表的資料結構。非線性表 像二叉樹,圖,堆等,資料之間不只是前...

資料結構棧 線性表實現

棧的定義 棧是一種特殊的表這種表只在表頭進行插入和刪除操作。因此,表頭對於棧來說具有特殊的意義,稱為棧頂。相應地,表尾稱為棧底。不含任何元素的棧稱為空棧。而本次給大家介紹用線性表實現的棧。如圖 這裡介紹雙向鍊錶的常用操作 l 建立棧 l 銷毀棧 l 清空棧 l 壓棧 l 出棧 l 返回棧頂元素 l ...

基礎資料結構 線性表實現

以下 是對基礎資料結構中的線性表的順序實現,在vs2012下沒問題 include define maxlength 20 struct list 增加元素 int insert list l,int e,int index l.data index e l.length return 1 刪除元素...