C++实现线性表的顺序表

SeqList.h

#pragma once
#include <iostream>
using namespace std;
const int MaxSize = 100;
template <class DataType>
class SeqList
{
public:
	SeqList();//建立空的顺序表 
	SeqList(DataType a[], int n);//建立长度为n的顺序表
	~SeqList();//析构函数
	int Length();//求线性表的长度
	DataType Get(int i);//按位查找,查找第i位元素的值
	int Locate(DataType x);//按值查找,查找值为x的元素序号
	void Insert(int i, DataType x);//插入操作,在第i个位置插入值为x的元素
	DataType Delete(int i);//删除操作,删除第i个位置的元素
	int Empty();//判断顺序表是否为空
	void PrintList();//遍历操作,按序号依次输出各元素
private:
	DataType data[MaxSize];//存放元素的数组		
	int length;//顺序表的长度 
};


template<class DataType>
SeqList<DataType>::SeqList()//建立空的顺序表
{
	length = 0;
}

template<class DataType>
SeqList<DataType>::SeqList(DataType a[], int n)//建立长度为n的顺序表
{
	if (n > MaxSize)throw("参数违法");
	for (int i = 0; i < n; i++)
		data[i] = a[i];
		length = n;
}
template<class DataType>
SeqList<DataType>::~SeqList() {//析构函数
}
template<class DataType>
int SeqList<DataType>::Empty() // 判断顺序表是否为空
{
	if (length)
		return true;
	else
		return false;

}

template<class DataType>
int SeqList<DataType>::Length()//求线性表的长度
{
	return length;
}
template <class DataType>
void SeqList<DataType>::PrintList()
{
	for (int i = 0; i < length; i++)
		cout << data[i] << '\t';//依次输出线性表的元素值
	cout << endl;
}
template <class DataType>
DataType SeqList<DataType>::Get(int i)//按位查找,查找第i位元素的值
{
	if (i<1 || i>length)throw "查找位置非法";
	else
		return data[i - 1];
}
template <class DataType>

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

template <class DataType>
void SeqList<DataType>::Insert(int i, DataType x)//插入操作,在第i个位置插入值为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 SeqList<DataType>::Delete(int i)//删除操作,删除第i个位置的元素
{
	DataType x;
	if (length == 0)throw"下溢";
	if (i<1 || i>length)throw"删除位置错误";
	x = data[i - 1];//取出i位置的元素
	for (int j = i; j < length; j++)
		data[j - 1] = data[j];//此处j 已经是元素所在的数组下标
	length--;
	return x;
}

main.cpp

#include <iostream>
#include "SeqList.h"
using namespace std;
int main()
{
	int r[5] = {1,2,3,4,5},i,x;
	SeqList<int>L( r,5 );//建立具有5个元素的顺序表
	cout << "当前顺序表的数据为:";
	L.PrintList();
	try
	{
		L.Insert(2, 8);
		cout << "输出插入后的数据为:";
		L.PrintList();
	}
	catch (char* str) { cout << str << endl; }
	cout << "当前线性表的长度为:" << L.Length() << endl;
	cout << "请输入要查找的元素值:" << endl;
	cin >> x;
	i = L.Locate(x);
	if (0 == i)cout << "查找失败" << endl;
	else
		cout << "元素" << x << "的位置为:" << i << endl;
	try
	{
		cout << "请输入查找第几个元素值:";
		cin >> i;
		cout << "第" << i << "个元素值是" << L.Get(i) << endl;

	}
	catch (char* str) { cout << str << endl; }
	try
	{
		cout << "请输入要删除第几个元素:";
		cin >> i;
		x = L.Delete(i);
		cout << "删除的元素是:" << x << ",删除后数据为:";
		L.PrintList();
	}
	catch (char* str) { cout << str << endl; }
	return 0;
}

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,以下是用C++实现线性顺序存储结构的代码: ```cpp #include <iostream> using namespace std; const int MAXSIZE = 100; // 定义线性的最大长度 class SeqList { private: int data[MAXSIZE]; // 存储线性元素的数组 int length; // 线性的当前长度 public: SeqList() { length = 0; } // 构造函数,初始化线性为空 ~SeqList() {} // 析构函数,释放空间 int getLength() { return length; } // 获取线性长度 bool isEmpty() { return length == 0; } // 判断线性是否为空 bool isFull() { return length == MAXSIZE; } // 判断线性是否已满 bool insert(int i, int x); // 在第i个位置插入元素x bool remove(int i); // 删除第i个位置的元素 int get(int i); // 获取第i个位置的元素 void printList(); // 打印线性中的所有元素 }; bool SeqList::insert(int i, int x) { if (i < 1 || i > length + 1) return false; // 插入位置不合法 if (isFull()) return false; // 线性已满,无法插入新元素 for (int j = length; j >= i; j--) { data[j] = data[j - 1]; // 将第i个位置及其后面的元素后移一位 } data[i - 1] = x; // 将新元素插入到第i个位置 length++; // 线性长度加1 return true; } bool SeqList::remove(int i) { if (i < 1 || i > length) return false; // 删除位置不合法 for (int j = i; j < length; j++) { data[j - 1] = data[j]; // 将第i个位置及其后面的元素前移一位 } length--; // 线性长度减1 return true; } int SeqList::get(int i) { if (i < 1 || i > length) return -1; // 获取位置不合法 return data[i - 1]; } void SeqList::printList() { for (int i = 0; i < length; i++) { cout << data[i] << " "; } cout << endl; } int main() { SeqList list; list.insert(1, 10); list.insert(2, 20); list.insert(3, 30); list.printList(); // 输出:10 20 30 list.remove(2); list.printList(); // 输出:10 30 cout << list.get(2) << endl; // 输出:30 return 0; } ``` 以上代码实现线性的基本操作,包括插入、删除、获取元素和打印线性中的所有元素。你可以根据需要进行修改和扩展。如果你有任何问题或者需要进一步的帮助,请随时告诉我。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

计算机小混子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值