线性表---数组描述

#ifndef ARRAYLIST_H_ #define ARRAYLIST_H_#include #includetemplate class arraylist { private: T* element; //存储一元数组的容器 int arrayLength; //一维数组容量 int listSize; //线性表的元素个数 bool CheckIndex(int theIndex); //检查下标是否越界 public: arraylist(int initcapacity=10); arraylist(const arraylist& thelist); ~arraylist(); //ADT实现 void add(T theElement); //向尾部添加元素 bool empty() const ; //判断链表是否为空 intsize() const; //判断商数组中元素的个数 T&get(int theIndex)const; //根据索引获取元素 intindexof(const T& theElement); //返回数组中第一出现的下标 void erase(int theIndex); //删除操作 void insert(int theIndex,const T& theElement); //插入操作 void output() const; //输出操作 bool equal(const arraylist& theList) const; //判断两个线性表是否相等 intCapacity(); //返回链表中可以放置的元素的个数 void changeLength1D(T* &a,int oldlength,int newlength); //将数组放大一倍 }; template arraylist::arraylist(int initcapacity) { if(initcapacity<1) { initcapacity=10; } arrayLength = initcapacity; element = new T[initcapacity]; listSize=0; } /*线性表拷贝构造函数*/ template arraylist::arraylist(const arraylist& thelist) { arrayLength=thelist.arrayLength; listSize=thelist.listSize; element=new T[arrayLength]; for(int i=0; i bool arraylist::CheckIndex(int theIndex) { if(theIndex<0 || theIndex >arrayLength) { throw "error" return false; } else { return true; } } /*线性表中加入一个元素*/ template void arraylist::add(T theElement) { /*如果线性表容量未满则添加,如果容量满了,将线性表扩大一倍*/ if(listSize < arrayLength) { element[listSize]=theElement; listSize++; } else { changeLength1D(element,arrayLength,2*arrayLength); element[listSize]=theElement; listSize++; } } /*判断线性表是否为空*/ template bool arraylist::empty() const { if(0==listSize) { return true; } else { return false; } } /*根据索引获取元素值*/ template T& arraylist::get(int theIndex) const { if(theIndex <0 || theIndex >llistSize) { return element[-1]; } else { return element[theIndex]; } } /*获取线性表中第元素的下标*/ template int arraylist::indexof(const T& theElement) { for(int i=0; i void arraylist::erase(int theIndex) { CheckIndex(theIndex); copy(element+theIndex+1,element+listSize,element+theIndex); element[--listSize].~T(); }/*在线性表中插入一个元素*/ template void arraylist::insert(int theIndex,const T& theElemen) { if(theIndex<0 || theIndex > listSize) { return ; } if(listSize == arrayLength) { int newLength = 2*arrayLength; changeLength1D(element,arrayLength,newLength); } copy(element+theIndex,element+listSize,element+theIndex+1); element[theIndex]=theElemen; listSize++; }/*线性表输出操作*/ template void arraylist::output() const { for(int i=0; i::equal(const arraylist& theList) const { if(listSize != theList.listSize) { return false; } if(arrayLength != theList.arrayLength) { return false; } bool equal = true; for(int i=0; i void arraylist::changeLength1D(T* &a,int oldlength,int newlength) { if(newlength < 0) { throw "newlength must be >0"; } T* temp=new T[newlength]; int number =min(oldlength,newlength); copy(a,a+number,temp); delete []a; a=temp; } /*析构函数*/ template arraylist::~arraylist() { delete []element; element=0; }#endif


    推荐阅读