c++基础练习(顺序表)


#include <iostream>
#include <string>
#include"cstdlib"
using namespace std;
class name
{
public:
	//构造函数
	name() {
		lenght = 0;
		data = 0;
	}
		//析构函数
	~name() {
		delete[data]arr;//释放内存
		arr = nullptr;//使其成为野指针
	}
	void newName(int data);//指针初始化,申请data大小的内存
	void name_cout();//输出
	void name_cin();//输入
	int Name_lenght();//返回lenght的值
	void name_add(int x,int num);//插入数据,第几位,数据
	int name_reduce(int x);//删除数据,第几位,返回数据
	int name_query(int x);//查询数据,第几位,返回值
	//int name_cha2(int x);//查询数据,那位数,在什么位置
	int name_modify(int x, int num);//修改数据,第几位,修改后的数据,返回被修改的数据
	void paixu_name();//排序


private:
	int *arr;//指针,申请动态内存
	int lenght;//指针长度
	int data;//指针最大值

};
void name::newName(int data)
{
	arr = new int[data];//为指针申请内存
	//保护
	if (!arr)
	{
		cout << "空间申请失败" << endl;
		return ;
	}
	lenght = data;
	this->data = data;
}
void name::name_cout()
{
	if (!arr)
	{
		cout << "数据错误,输出失败输出失败" << endl;
		return;
	}
	for (int i = 0; i < lenght; i++)
	{
		cout << arr[i] << " ";

	}
	cout << endl;
	cout << "最大长度是" << data << ",现在长度是" << lenght << endl;
}
//第一次输入
void name::name_cin()
{
	for (int i = 0; i < lenght; i++)
	{
		cin >> arr[i];
	}
}
int name::Name_lenght()
{
	return lenght;
}
//插入数据,指针,第几位,数据
void name::name_add(int x, int num)
{
	if (x<0 || x>lenght)
	{
		cout << "数据插入错误,操作失败" << endl;
		return;
	}
	data += 1;
	lenght++;
	this->arr = (int*)realloc(this->arr, sizeof(int)*lenght);
	//保护
	if (!arr)
	{
		cout << "空间申请失败" << endl;
		return ;
	}
	for (int i=lenght; i >=x; i--)
	{
		arr[i] = arr[i - 1];
	}
	arr[x - 1] = num;
}
//删除数据,指针,第几位,数据
int name::name_reduce(int x)
{
	if (x<0 || x>lenght)
	{
		cout << "数据删除错误,操作失败" << endl;
		return  NULL;
	}
	int w = arr[x - 1];
	for (int i = x;i<lenght; i++)
	{
		arr[i-1] = arr[i];
	}
	lenght--;
	this->arr = (int*)realloc(this->arr, sizeof(int)*lenght);
	return w;
}
//修改数据,第几位,修改后的数据,返回被修改的数据
int name::name_modify(int x, int num)
{
	if (x<0 || x>lenght)
	{
		cout << "数据修改错误,错操作失败" << endl;
		return NULL;
	}

	int w = arr[x - 1];
	arr[x - 1] = num;
	return w;
}
//查询数据,第几位,返回值
int name::name_query(int x)
{
	if (x<0 || x>lenght)
	{
		cout << "数据查询错误,操作失败" << endl;
		return NULL;
	}

	return arr[x-1];

}
// 查询数据,那位数,在什么位置
void name::paixu_name()
{
	for (int i = lenght - 1; i > 0; i--)
	{
		for (int j = 0; j < i; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				arr[j] = arr[j] + arr[j + 1];
				arr[j + 1] = arr[j] - arr[j + 1];
				arr[j] = arr[j] - arr[j + 1];

			}
		}
	}
}
int main()
{	
	int w/*位置*/, num/*数据*/,x=0;
	name a;//创建一个对象
	cout << "\t\t\t顺序表" << endl;
	cout << "要输入多少个数据" << endl;
	cin >> num;
	a.newName(num);
	cout << "请输入数据:" << endl;
	a.name_cin();
	cout << "顺序表现在的数据是:" << endl;
	a.name_cout();
	while (x!= -1)
	{
		cout << "*********************************************************************************" << endl;
		cout << "1、添加数据" << endl;
		cout << "2、删除数据" << endl;
		cout << "3、修改数据" << endl;
		cout << "4、查找数据" << endl;
		cout << "5、输出数据" << endl;
		cout << "6、排序并输出数据" << endl;
		cout << "*********************************************************************************" << endl;
		
		cout << "请做出选择(输入‘-1’结束)" << endl;
		cin >> x;
		system("cls");
		switch (x)
		{
		case 1:cout << "请输入增加数据的位置和数据:" << endl;
			cin >> w >> num;
			a.name_add(w, num);
			break;
		case 2:cout << "请输入删除的要数据位置" << endl;
			cin >> w;
			num = a.name_reduce(w);
			cout << "删除的的数据是:";
			cout << num << endl;
			break;
		case 3:cout << "顺序表现在的数据是:" << endl;
			a.name_cout();
			cout << "请输入要修改的数据位置和数据" << endl;
			cin >> w >> num;
			num = a.name_modify(w, num);
			cout << "被替换前的数据是:";
			cout << num << endl;
			break;
		case 4:cout << "请输入要查找的第几位数的数据" << endl;
			cin >> w;
			num=a.name_query(w);
			cout << "这位置上的数据是:" << num << endl;
			break;
		case 5:cout << "顺序表现在的数据是:" << endl;
			a.name_cout();
			break;
		case 6:	a.paixu_name();
			cout << "顺序表现在的数据是:" << endl;
			a.name_cout();
			break;
		default:cout << "数据输入错误,请重新输入" <<endl;
		}

	}

	system("pause");
	return 0;
}

以上就是本次文档的全部内容,如果您不厌恶这篇文章,请点一个赞再走,如果您有什么不懂的地方或者某方面想看的内容,请在评论区评论或私聊我,我会尽我最大的努力,解决您的问题

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

秘密之乡

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

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

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

打赏作者

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

抵扣说明:

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

余额充值