**
数据结构–用C++实现顺序表
**
Sequence List(Array):
线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素
顺序表为静态存储分配,需要事先确定容量
老师课上提供了一个class模板,如下:
那么,我们现在可以根据这个模板开始造轮子了。代码实现思路很简单,按照上面提供的函数用自己的方法一步步完善就可以了。
为了使这个顺序表适用于不同类型的变量,避免重复造同一个轮子,我采用了template方法进行构建整个class类。
代码如下:
头文件TemplateSeqList.h
#ifndef SeqList_byNim
#define SeqList_byNim
#include<iostream>
using namespace std;
template<class T>
class SeqList
{
public:
//表头aLsit[0],表尾aList[length-1]
SeqList(const int size){ //创造一个新的顺序表,参数为表实例的最大长度
maxSize=size;
aList=new T[maxSize];
length=position=0;
}
~SeqList(){ //析构函数,用于消除该表实例
delete [] aList;
}
void clear(){ //将顺序表存储的内容清除,成为空表
delete [] aList;
length=position=0;
aList=new T[maxSize];
}
int len(){ //返回此顺序表的当前实际长度
return length;
}
bool append(const T value) //在表尾添加一个元素value,表的长度加1
{
length++;
aList[length-1]=value;
}
bool insert(const int pos,const T value) //在位置pos上插入一个元素value,表的长度加1
{
//pre-condition: 1<=pos<=length+1
//post-condition: Insert element value at location pos and add 1 to length of aList
int j;
if(length>=maxSize)
{
cout<<"OVERFLOW"<<endl;
return false;
}
if(pos<1||pos>length+1)
{
cout<<"ERROR"<<endl;
return false;
}
else
{
for(j=length-1;j>=pos-1;j--)
{
aList[j+1]=aList[j];
}
aList[pos-1]=value;
length++;
}
return true;
}
bool del(const int pos) //删除位置pos上的元素,表的长度减1
{
int j;
if(pos<1||pos>length)
{
cout<<"ERROR\n";
return false;
}
else
{
for(j=pos-1;j<length-1;j++)
{
aList[j]=aList[j+1];
}
length--;
}
}
bool setValue(const int pos,const T value) //用value修改位置pos的元素值
{
aList[pos-1]=value;
}
T getValue(const int pos) //将位置pos的元素值返回到变量value中
{
return aList[pos-1];
}
int getPos(const T value) //查找值为value的元素,并返回第一次出现的位置
{
position=0;
while(position<length)
{
if(aList[position]!=value)
{
position++;
}
else
{
return position+1;
}
}
return -1;
}
void print() //打印整个顺序表
{
cout<<"length="<<length<<endl;
for(int i=0;i<length;i++)
{
if(i==0) cout<<aList[0];
else{
cout<<','<<aList[i];
}
}
cout<<endl;
}
private:
T *aList; //私有变量,存储线性表的实例
int length; //顺序表实例的当前长度
int maxSize; //顺序表实例的最大长度
int position; //当前处理位置
};
#endif
具体的main函数调用方法就不贴出来了,自己对着函数接口试试吧~