顺序表 C++

//注意,Get和Delete等方法
//	要从1开始,否则报错
#pragma once
#include <iostream>           //引用输入输出流库函数的头文件
using namespace std;

const int MaxSize = 100;          //100只是示例性的数据,可以根据实际问题具体定义
template <class DataType>         //定义模板类SeqList
class SeqList
{
	friend ostream& operator<<<DataType>(ostream& os,SeqList<DataType>& mySeqList);
public:
	SeqList() {length = 0;}            //无参构造函数,建立一个空的顺序表
	SeqList(DataType a[], int n);       //有参构造函数,建立一个长度为n的顺序表
	~SeqList();
	int Length() {return length;}        //求线性表的长度
	DataType Get(int i);               //按位查找,在线性表中查找第i个元素
	int Locate(DataType x );           //按值查找,在线性表中查找值为x的元素序号
	void Insert(int i, DataType x);       //插入操作,在线性表中第i个位置前插入值为x的元素
	DataType Delete(int i);              //删除操作,删除线性表的第i个元素
private:
	DataType data[MaxSize];           //存放数据元素的数组
	int length;                        //线性表的长度
};

template<class DataType>
ostream& operator<<(ostream& os,SeqList<DataType>& mySeqList)
{
	for(int i=0;i<mySeqList.length;i++)
		os<<mySeqList.data[i]<<" ";
	os<<endl;
	return os;
}

template <class DataType>  
SeqList<DataType>::SeqList(DataType a[], int n)
{
	if (n > MaxSize) throw "参数非法";
	for (int i = 0; i < n; i++)  
		data[i] = a[i];
	length = n;
}

template <class DataType>  
DataType SeqList<DataType> :: Get(int i)
{
	if (i < 1 && i > length) throw "查找位置非法";
	else return data[i - 1];
}

template <class DataType>  
int SeqList<DataType> :: Locate(DataType x)
{
	for (int i = 0; i < length; i++) 
		if (data[i] == x) return i+1;       //下标为i的元素等于x,返回其序号i+1
	return 0;                        //退出循环,说明查找失败
}

template<class DataType>
void SeqList<DataType>::Insert(int i, DataType x)
{
	if (length >= MaxSize) throw "上溢";
	if (i < 1 || i > length + 1) throw "位置";
	for(int j=length; j>=i; j--)
		data[j] = data[j-1];			  //注意第j个元素存在数组下标为j-1处
	data[i - 1] = x;
	length++;
}

template <class DataType>  
DataType SeqList<DataType> :: Delete(int i)
{
	if (length == 0) throw "下溢";
	if (i < 1 || i > length) throw "位置";
	DataType x = data[i - 1];              //取出位置i的元素
	for (int j = i; j < length; j++)
		data[j - 1] = data[j];        //注意此处j已经是元素所在的数组下标
	length--;
	return x;
}

template<class DataType>
SeqList<DataType>::~SeqList()
{
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值