线性表——顺序表的实现和应用

    静态分配顺序存储结构的线性表:
头文件:
#include<iostream>

const int MAXSIZE = 100;

template<class DataType>
class SqList {
public:
	SqList() { length = 0 }
	SqList(DataType array[], int n);
	~SqList() {}
	int GetLength() { return length; }//获取顺序表长度
	DataType GetElement(int i);//获取位置所在的元素
	int GetLocal(DataType x);//获取元素所在位置
	void Insert(int i, DataType x);//顺序表插入元素
	DataType Delete(int i);//顺序表删除元素
	void PrintSqList();
private:
	DataType data[MAXSIZE];//一维数组
	int length;//顺序表长度
};

template<class DataType>
SqList<DataType>::SqList(DataType array[], int n)
{
	if (n > MAXSIZE)
	{
		throw"传入的顺序表长度过长";
	}
	for (int i = 0; i < n; i++)
	{
		data[i] = array[i];
	}
	length = n;
}
template<class DataType>
DataType SqList<DataType>::GetElement(int i)
{
	if (i<1 || i>length)
	{
		throw"位置输入有误";
	}
	else
	{
		return data[i-1];
	}
}

template<class DataType>
int SqList<DataType>::GetLocal(DataType x)
{
	for (int i = 0; i < length; i++)
	{
		if (data[i] == x)
		{
			return (i + 1);
		}

	}
	return 0;
}

template<class DataType>
void SqList<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];
	}
	data[i - 1] = x;
	length++;
}

template<class DataType>
DataType SqList<DataType>::Delete(int index)
{
	DataType x;
	if (index<1 || index>length)
	{
		throw "删除位置有误";
	}
	else
	{
		x = data[index - 1];
		for (int i = index; i < length; i++)
		{
			data[i - 1] = data[i];
		}
		length--;
	}
	return x;
}

template<class DataType>
void SqList<DataType>::PrintSqList()
{
	if (length < 1)
	{
		throw "无元素";
	}
	else
	{
		for (int i = 0; i < length; i++)
		{
			cout << data[i] << "  ";
		}
		cout << endl;
	}
}

源文件:
#include<iostream>
#include"SqList.h"

using namespace std;

void show()
{
	cout << "------------------------------------" << endl;
}

int main()
{
	int array[10] = { 1,2,3,4,5,6,7,8,9,14 };
	SqList<int> list =SqList<int>(array, 10);
	cout << "顺序表:" << endl;
	list.PrintSqList();
	show();
	cout << "长度:" << list.GetLength() << endl;
	cout << "第五个元素:" << list.GetElement(5) << endl;
	cout << "元素8的位置" << list.GetLocal(8) << endl;
	show();
	cout << "第1个位置插入40" << endl;
	list.Insert(1, 40);
	cout << "顺序表为:" << endl;
	list.PrintSqList();
	cout << "长度:" << list.GetLength() << endl;
	cout << "删除第7个元素" << endl;
	list.Delete(7);
	cout << "顺序表:" << endl;
	list.PrintSqList();
	cout << "顺序表长度:" << list.GetLength() << endl;
	show();
	system("pause");
	return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值