資料結構 C 實現(一) 陣列鍊錶

2021-07-25 11:55:08 字數 4408 閱讀 8509

資料結構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的...