顺序表的简单实现

《数据结构》自己练习用的代码,顺序表的简单实现,实现了一部分而已


// 请随意使用和修改
#include <iostream>
#include <cstdlib>
using namespace std;

template<class Type> class SeqList
{

public:
SeqList()
{
data = NULL;
MaxSize = 0;
len = 0;
}
SeqList(int size)
{
data = new Type[size];
if(data==NULL)
{
cerr<<"Memory allocation failare!"<<endl;
exit(1);
}
MaxSize = size;
len = 0;
}
~SeqList()
{
delete[] data;
}

int insertItem(Type elem, int index)
{
if(index<0 || index>len)
{
cerr<<"Error: out of range"<<endl;
exit(1);
}
for(int i=len; i>index; i--)data[i] = data[i-1];
data[index] = elem;
return ++len;
}

int appendItem(Type elem)
{
return insertItem(elem, len);
}

int deleteItem(int index)
{
if(index<0 || index>len)
{
cerr<<"Error: out of range"<<endl;
exit(1);
}
for(int i=index;i<len-1;i++)data[i] = data[i+1];
return --len;
}

void select_sort()
{
int min,t;
for(int i=0;i<len-1;i++)
{
min = i;
for(int j=i+1;j<len;j++)
if(data[j]<data[min])min=j;
t = data[i];
data[i] = data[min];
data[min] = t;
}
}

void insert_sort()
{
Type t;
int j;
for(int i=len-1;i>0;i--)
{
if(data[i]<data[i-1])
{
t = data[i];
data[i] = data[i-1];
data[i-1] = t;
}
}
for(int i=2;i<len;i++)
{
j = i;
t = data[i];
while(t<data[j-1])
{
data[j] = data[j-1];
j--;
}
data[j] = t;
}
}

Type get(int index)
{
if(index>=0 && index<len)
{
return data[index];
}
exit(1);
}

Type operator[](int index)
{
if(index>=0 && index<len)
{
return data[index];
}
}
int length()
{
return len;
}

private:
Type* data;
int MaxSize;

int len;
};

int main()
{
SeqList<double> seq1(10), seq2(13);
seq1.insertItem(1.24, 0);
seq1.insertItem(2.24, 1);
seq1.appendItem(10.0);
seq1.appendItem(13.0);
seq1.appendItem(3.1415926);
seq1.appendItem(4.16);
seq1.appendItem(1.16);

cout<<"the first element of seq1: "<<seq1.get(0)<<endl;
cout<<"the second element of seq1: "<<seq1[1]<<endl;
cout<<"length: "<<seq1.length()<<endl;

seq1.deleteItem(2);
//seq1.select_sort();
seq1.insert_sort();
for(int i=0;i<seq1.length();i++)
{
cout<<seq1[i]<<" ";
}
cout<<endl;
seq2.appendItem(2);
seq2.appendItem(1);
seq2.appendItem(3);
seq2.insert_sort();
for(int i=0;i<seq2.length();i++)
{
cout<<seq2[i]<<" ";
}
cout<<endl;

return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值