顺序表:用一段地址连续的存储单元,即一维数组,来依次存储线性表的数据元素>
实现代码:
<span style="font-size:18px;">#include<iostream>
using namespace std;
const smax=50;
template<class Datatype>
class orderlist
{
public:
orderlist(){length=0;}
orderlist(Datatype a[],int n);
~orderlist(){}
Datatype search(int i);
void locate(Datatype x);
void insert(Datatype x,int i);
void Delete1 (Datatype x);
void Delete2(int i);
void printlist();
private:
Datatype data[smax];
int length;
};
template<class Datatype>
orderlist<Datatype>::orderlist (Datatype a[],int n)//输入
{
if(n>smax)throw;
for(int i=0;i<n;i++)
data[i]=a[i];
length=n;
}
template<class Datatype>//按位查找
Datatype orderlist<Datatype>::search(int i)
{
if(i<1 || i>length)throw;
cout<<"第四个元素为:"<<data[i-1]<<endl;
return data[i-1];
}
template<class Datatype>//按值查找****
void orderlist<Datatype>::locate(Datatype x)
{
for(int i=0;i<length;i++)
{
if (data[i]!=x)
continue;
cout<<x<<"为第"<<i+1<<"个元素"<<endl;
break;
}
if (i==length)
cout<<"未找到"<<x<<endl;
}
template<class Datatype>
void orderlist<Datatype>::insert(Datatype x,int i)//插入
{
if(i<1 || i>length+1)throw;
if(length>=10)throw;
for(int j=length;j>=i;j--)
data[j]=data[j-1];
data[i-1]=x;
cout<<"插入成功"<<endl;
length++;
}
template<class Datatype>
void orderlist<Datatype>::Delete1(Datatype x)//按值删除******
{
if(length==0)throw;
for(int i=0;i<length;i++)//for,if,break,continue的灵活运用
{
if (data[i]!=x)//!=与==的运用
continue;
else
for(;i<length-1;i++)
data[i]=data[i+1];
cout<<x<<"已被删除"<<endl;
break;
}
if(i==length)
cout<<"未找到要删除的元素"<<x<<endl;
else
length--;
}
template<class Datatype>
void orderlist<Datatype>::Delete2(int i)//按位删除
{
if(length==0)throw;
if(i<1 || i>length)throw;
Datatype x=data[i-1];
for(int j=i;j<length;j++)
data[j-1]=data[j];
cout<<"第"<<i<<"个元素"<<x<<"已被删除"<<endl;
length--;
}
template<class Datatype>
void orderlist<Datatype>::printlist()//输出元素
{
cout<<"这"<<length<<"个元素为:";
for(int i=0;i<length;i++)
cout<<data[i]<<'\t';
cout<<endl;
}
int main()
{
int n=5,a[5];
cout<<"请输入5个整数:"<<'\t';
for(int i=0;i<5;i++)
cin>>a[i];
orderlist<int> g1;
orderlist<int> g2(a,5);
cout<<"查找第4个元素-->"<<'\t';
g2.search(4);
cout<<"查找元素9-->"<<'\t';
g2.locate(9);
cout<<"在第4个位置中插入元素6-->"<<'\t';
g2.insert(6,4);
cout<<"输出所有元素-->"<<'\t';
g2.printlist();
cout<<"删除元素11-->"<<'\t';
g2.Delete1 (11);
cout<<"输出所有元素-->"<<'\t';
g2.printlist();
cout<<"删除第5个元素-->"<<'\t';
g2.Delete2(5);
cout<<"输出所有元素-->"<<'\t';
g2.printlist();
return 0;
}
</span>
调试结果:
总结:
首先巩固了c++面向对象与程序设计的知识,同时对算法的实现有了一定的基本的掌握,(算法的编写要充分灵活运用基本的for,while,if,break等语句,算法不是唯一的,要自己编写,调试多次,修改多次总会成功的.)
对利用一维数组实现线性表有的一定的掌握,对以后单链表的实现有很多借鉴之处.