顺序表的实现

顺序表:用一段地址连续的存储单元,即一维数组,来依次存储线性表的数据元素>

实现代码:

<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等语句,算法不是唯一的,要自己编写,调试多次,修改多次总会成功的.)
对利用一维数组实现线性表有的一定的掌握,对以后单链表的实现有很多借鉴之处.








评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值