按照上述抽象描述,定義乙個模板類來描述上述的抽象描述。
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 刪除元素...