DS顺序表--类实现

题目描述

用C++语言和类实现顺序表

属性包括:数组、实际长度、最大长度(设定为1000)

操作包括:创建、插入、删除、查找

类定义参考

输入

第1行先输入n表示有n个数据,即n是实际长度;接着输入n个数据
第2行输入要插入的位置和新数据
第3行输入要插入的位置和新数据
第4行输入要删除的位置
第5行输入要删除的位置
第6行输入要查找的位置
第7行输入要查找的位置

6 11 22 33 44 55 66
3 777
1 888
1
9
0
5

输出

数据之间用空格隔开

第1行输出创建后的顺序表内容,包括顺序表实际长度和数据

每成功执行一次操作(插入或删除),输出执行后的顺序表内容

每成功执行一次查找,输出查找到的数据

如果执行操作失败(包括插入、删除、查找等失败),输出字符串error,不必输出顺序表内

6 11 22 33 44 55 66 
7 11 22 777 33 44 55 66 
8 888 11 22 777 33 44 55 66 
7 11 22 777 33 44 55 66 
error
error
44

#include <iostream>
using namespace std;

#define ok 0
#define error -1

//顺序表定义
class Seqlist
{
	int* list;//元素数组
	int maxsize;//顺序表最大长度
	int size;//顺序表实际长度
public:
	Seqlist();
	Seqlist(int *list,int size);
	~Seqlist();
	int listsize();
	int listinsert(int i, int item);//插入元素,数值:item,位置:i
	int listdel(int i);//删除第i个元素
	int listget(int i);//获取第i个元素
	void listdisplay();
};

Seqlist::Seqlist()
{
	maxsize = 1000;
	size = 0;
	list = new int[maxsize];
}

Seqlist::Seqlist(int* l, int s)
{
	size = s;
	maxsize = 1000;
	list = new int[maxsize];//一定要定义为maxsize,否则会导致溢出
	for (int i = 0; i < s; i++)
	{
		list[i] = l[i];
	}
}

Seqlist::~Seqlist()
{
	delete[]list;
}

int Seqlist::listsize()
{
	return size;
}

int Seqlist::listinsert(int i, int item)
{
	if (i > size + 1 || i < 1)//i是第i个,而数组从0开始
	{
		cout << "error" << endl;
		return error;
	}

	size++;
	for (int j = size; j >= i; j--)
	{
		list[j] = list[j - 1];//后一元素等于前一元素,腾出位置
	}
	i--;
	list[i] = item;
	listdisplay();
	return ok;
}

int Seqlist::listdel(int i)
{
	if (i > size + 1 || i < 1)//i是第i个,而数组从0开始
	{
		cout << "error" << endl;
		return error;
	}
	i--;
	size--;
	for (int j = i; j < size; j++)
	{
		list[j] = list[j + 1];//前一元素等于后一元素
	}
	listdisplay();
	return ok;
}

int Seqlist::listget(int i)
{
	if (i > size || i < 1)//i是第i个,而数组从0开始
	{
		cout << "error";
		return error;
	}
	cout << list[i - 1];
	return ok;
}

void Seqlist::listdisplay()
{
	cout << size << " ";
	for (int i = 0; i < size; i++)
	{
		cout << list[i] << " ";
	}
	cout << endl;
}

int main()
{
	int n;
	cin >> n;
	int* item = new int[n];
	for (int i = 0; i < n; i++)
	{
		cin >> item[i];
		
	}
	Seqlist seq(item, n);
	seq.listdisplay();
	int t, data;
	for (int i = 0; i < 2; i++)
	{
		cin >> t >> data;
		seq.listinsert(t, data);
	}
	for (int i = 0; i < 2; i++)
	{
		cin >> t;
		seq.listdel(t);
	}
	for (int i = 0; i < 2; i++)
	{
		cin >> t;
		seq.listget(t);
		if (i != 1)
			cout << endl;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值