概念
顺序表是最基本的数据结构之一,它属于线性表的一种存储表现形式,在计算机内部表示为一块连续的内存空间。
C++实现顺序表代码
#include <iostream>
using namespace std;
template <typename T> class SeqList
{
public:
SeqList(int size = defaultSize)
{
if(size>0)
{
maxSize = size;
length = 0;
elements = new T[maxSize];
}
}
~SeqList()
{
delete[] elements;
}
int getLength();
bool insertElement(T data);
bool deleteElement(int location);
T getElement(int location);
bool changgeElement(int location, T newData);
private:
T* elements;
int maxSize;
int length;
static const int defaultSize = 10;
};
//获取顺序表的长度
template<typename T> int SeqList<T>::getLength()
{
return length;
}
//顺序表插入一个元素
template<typename T> bool SeqList<T>::insertElement(T data)
{
int curIndex = length;
if(length>maxSize)
{
return false;
}
else
{
elements[curIndex] = data;
++length;
return true;
}
}
//顺序表删除一个元素
template<typename T> bool SeqList<T>::deleteElement(int location)
{
if(location>=length || location<0)
{
return false;
}
else
{
for(int i=location; i<length; ++i)
{
elements[i] = elements[i+1];
}
--length;
return true;
}
}
//顺序表获取指定位置的元素
template <typename T> T SeqList<T>::getElement(int location)
{
if(location>=length || location<0)
{
return 0;
}
else
{
return elements[location];
}
}
//修改指定位置元素的值
template<typename T> bool SeqList<T>::changgeElement(int location,T newData)
{
if(location>=length || location<0)
{
return false;
}
else
{
elements[location] = newData;
return true;
}
}
int main()
{
//测试int型顺序表
SeqList<int> seqlist(10);
//插入元素
for(int i=0; i<10; ++i)
{
seqlist.insertElement(i);
}
//输出顺序表内容
for(int i=0; i<seqlist.getLength(); ++i)
{
cout<<seqlist.getElement(i)<<" ";
}
cout<<endl;
//删除索引为4的元素
seqlist.deleteElement(4);
//输出顺序表内容
for(int i=0; i<seqlist.getLength(); ++i)
{
cout<<seqlist.getElement(i)<<" ";
}
cout<<endl;
//将顺序表索引为4的元素修改为8
seqlist.changgeElement(4,8);
//输出顺序表内容
for(int i=0; i<seqlist.getLength(); ++i)
{
cout<<seqlist.getElement(i)<<" ";
}
cout<<endl;
//--------------------------
cout<<"--------------------------"<<endl;
//测试string型顺序表
SeqList<string> strSeqlist(3);
//插入元素
strSeqlist.insertElement("aa");
strSeqlist.insertElement("bb");
strSeqlist.insertElement("cc");
//输出顺序表内容
for(int i=0; i<strSeqlist.getLength(); ++i)
{
cout<<strSeqlist.getElement(i)<<" ";
}
cout<<endl;
// //删除索引为2的元素???有问题???
// strSeqlist.deleteElement(1);
// //输出顺序表内容
// for(int i=0; i<strSeqlist.getLength(); ++i)
// {
// cout<<strSeqlist.getElement(i)<<" ";
// }
// cout<<endl;
strSeqlist.changgeElement(2,"dd");
//输出顺序表内容
for(int i=0; i<strSeqlist.getLength(); ++i)
{
cout<<strSeqlist.getElement(i)<<" ";
}
cout<<endl;
return 0;
}