資料結構c++實現第一發,主要有幾部分構成,分別是乙個抽象類linearlist.h、陣列鍊錶的標頭檔案arraylist.h以及main.cpp原始檔。
linearlist.h檔案具體資訊如下:
#ifndef inc_01_arraylist_linearlist_h
#define inc_01_arraylist_linearlist_h
#include
template
class linearlist ;
virtual bool empty() const = 0;
virtual int size() const = 0;
virtual t& get(int index) const = 0;
virtual int indexof(const t& theelement) const = 0;//first pos
virtual void erase(int index) = 0;
virtual void insert(int index, const t& theelement) = 0;
virtual void output(std::ostream& out) const = 0;
};
arraylist.h檔案如下:
#ifndef inc_01_arraylist_arraylist_h
#define inc_01_arraylist_arraylist_h
#include "linearlist.h"
#include
#include
using namespace std;
template
void resizecapacity(t*& a,int oldcapacity, int newcapacity);
template
class arraylist :public linearlist
//operator t& operator*() const t* operator->() const iterator& operator++() iterator& operator++(int) iterator& operator--() iterator& operator--(int) bool operator!=(const iterator rhl) const bool operator==(const iterator rhl) const protected: t* pos; }; iterator begin() iterator end() public: //construct copy destroy //arraylist(int initcapacity = 10); arraylist(int initcapacity = 10, int size = 0); arraylist(const arraylist
&); ~arraylist() ; //adt methods bool empty() const override int size() const override t& get(int index) const override; int indexof(const t& theelement) const override ; void erase(int index) override ; void insert(int index, const t& theelement) override ; void output(ostream& out) const override ; //other int capacity() const void set(int index, t var); void trimtosize(); void setsize(int setsize); t& operator(int); bool const operator==(const arraylist &); bool const operator!=(const arraylist &); bool const operator<(const arraylist &); protected: void checkindex(int index) const; t* element; int arraycapacity; int listsize; int addsize; }; template
ostream& operator<<(ostream& out,arraylist
& al); template
arraylist
::arraylist(int initcapacity,int size) arraycapacity = initcapacity; listsize = 1; element = new t[arraycapacity]; addsize = size; } template
arraylist
::arraylist(const arraylist
&rhl) template
void arraylist
::checkindex(int index) const } template
t &arraylist
::get(int index) const template
int arraylist
::indexof(const t &theelement) const template
void arraylist
::erase(int index) else } copy(element+index,element+listsize-1,element+index+1); element[index] = theelement; } template
void arraylist
::output(ostream &out) const template
void arraylist
::set(int index, t var) template
void arraylist
::trimtosize() template
bool const arraylist
::operator==(const arraylist &rhl) template
bool const arraylist
::operator<(const arraylist &rhl) if(listsize
ostream &operator<<(ostream &out, arraylist
&al) template
void resizecapacity(t*& a,int oldcapacity, int newcapacity) t* tmp = new t[newcapacity]; int num = min(oldcapacity,newcapacity); copy(a,a+num,tmp); delete a; a = tmp; } #endif //inc_01_arraylist_arraylist_h
簡單的測試如下:
#include #include "arraylist.h"
template void resizelength2d(t**& a,int oldrow,int oldcol,int newrow,int newcol)
這裡我對arraylist類裡的函式做一些說明;
element代表儲存元素,arraycapacity表示容量大小,listsize表示陣列實際大小,capacity是要比listsize大的,相當於留有一些裕量,這一點和stl的vector類似。addsize表示listsize達到一定大小後,單次對capacity擴容的大小。checkindex()函式後續用於檢測索引值是否有效。
然後是public部分,內嵌類iterator為陣列鍊錶定義了迭代器,begin()以及end()的設定與stl的容器相同。
建構函式arraylist()中有兩個引數,乙個代表預先給capacity的大小,另乙個設定的是單次擴容值,如果預設,則預設每次擴容時將capacity翻倍。析構函式,清空element元素。
接下來時覆寫抽象類成員函式的部分,empty()函式返回當前陣列是否為空,為空返回true;size()函式返回當前的陣列大小,這裡的大小時listsize,不是容量。get()函式返回指定索引處的值;indexof()返回目標值的第乙個索引,若目標不在陣列中,返回-1;erase()擦除指定index的資料,相應更改陣列大小與容量;insert()在指定索引處插入值;output()函式將陣列元素依次輸出;
接下來是非構造拷貝析構函式、同時也不是覆寫的成員函式。capacity()函式返回容量值,set()設定指定索引處的值;trimtosize()函式將容量設定為與listsize大小一i樣;setsize()函式使得陣列大小等於指定大小。
最後是幾個運算子的過載,應該能看懂。另外,還有乙個輸出流的運算子的過載,定義在類外。
資料結構 一 陣列和鍊錶
1.實現乙個支援動態擴容的陣列 定義陣列型別 define max dim 8 最大維數 typedef struct array 陣列生成演算法 intsetarray array a,int n,int dim 生成n維陣列a的演算法,其中dim存放各維數長度 a base datatype m...
(一)資料結構線性表的C 實現
資料結構線性表的c 實現,參考的是嚴蔚敏老師的資料結構書 include using namespace std define list init size 100 線性表初始空間分配值 define listincrement 10 線性表增量 define true 1 define false...
javascript資料結構(一)陣列
一 陣列的建立於初始化 var day new array var day new array 7 指定長度 var day new array 0,1,2,3,4 var day 二 陣列的訪問 使用for迴圈遍歷陣列 三 給陣列新增元素 array array.length 10 使用push的...