C++的类实现之顺序表

C++的类实现之顺序表,第1张

#include
using namespace std;
typedef int Elem;

//线性表是一种抽象数据类型;数组是一种具体的数据结构。
//线性表与数组的逻辑结构是不一样的.

class SqList
{
public:
	SqList(int size);       //构造函数  初始化内存容量为size的顺序表
	~SqList();				//析构函数  销毁内存

	void CreatList();  //填充顺序表
	void Display();        //输出顺序表中所有元素
	bool EmptyList();      //判断是否为空
	int GetLength();       //获取长度
	void LocateElem();   //查找指定下标元素
	void GetElem();      //查找指定数据,返回下标
	bool InsertList();     //指定位置插入数值
	bool DeleteList();		//删除指定位置元素
	bool DeleteElem();     //删除指定数值
	void SortList();       //排序

private:
	//三个属性:内存地址、内存大小、当前长度

	Elem * data;          //指针(地址)指向一块内存 
	Elem DataSize;       // 内存的大小  (最大容量)
	Elem length;		 // 线性表当前长度
	
};

//size为初始化内存大小
SqList::SqList(int size)
{
	DataSize = size;
	data = new Elem[DataSize];
	length = 0;
}

SqList::~SqList()
{
	delete[] data;   // 释放数组内存
	data = NULL;
}

//填充顺序表
void SqList::CreatList()
{
	int n = 0;
	cout << "请输入数据个数:" << endl;
	cin >> n;
	cout << "请输入具体数据:" << endl;
	for (int i = 0; i < n; i++)
	{
		cin >> data[i];
	}
	length = n;
	cout << "create SqList success!" << endl;
}

//遍历显示顺序表
void SqList::Display() 
{
	cout << "display SqList:";
	for (int i = 0; i < length; i++)
	{
		cout << data[i] << " ";
	}
	cout << endl;
}

//判断表是否为空
bool SqList::EmptyList()
{
	return length == 0 ? true : false;
}

//顺序表的长度
int SqList::GetLength()
{
	cout << "当前线性表长度为:" << length << endl;
	return length;
}

//查找指定下标元素
void SqList::LocateElem()
{
	int k = 0;
	cout << "请输入查找位置:" << endl;
	cin >> k;
	cout << "所查数据为:" << data[k - 1] << endl;
}

//搜索x在表中的位置
void SqList::GetElem()
{
	int e = 0,f = 0;
	cout << "请输入查找数值:" << endl;
	cin >> e;
	for (int i = 0; i < length; i++)
	{
		if (data[i] == e)
		{
			cout << "查到数值为:" << data[i] << "下标为:" << i << endl;
			f++;
		}
	}
	if (f == 0)
		cout << "数据不存在" << endl;
}

//指定位置插入数值
bool SqList::InsertList()
{
	int k, e = 0;
	cout << "请输入插入的位置:" << endl;
	cin >> k;
	cout << "请输入插入的数值:" << endl;
	cin >> e;
	if (k<0 || k>length+1)
		return false;
	for (int i = length - 1; i >= k - 1; i--)
	{
		data[i+1] = data[i];
	}
	data[k - 1] = e;
	length++;
	return true;	
}

//删除指定位置元素
bool SqList::DeleteList()
{
	int k = 0;
	cout << "请输入删除的位置:" << endl;
	cin >> k;
	if (k<0 || k>length)
		return false;
	for (int i = k-1; i < length; i++)
	{
		data[i] = data[i+1];
	}
	length--;
	return true;
}

//删除指定数值
bool SqList::DeleteElem()
{
	int e = 0;
	cout << "请输入删除数值:" << endl;
	cin >> e;
	int n = 0;
	for (int i = 0; i < length; i++)
	{
		if (data[i] == e)
		{
			for (int j = i; j < length; j++)
			{
				data[j] = data[j + 1];
			}
			n++;
		}
	}
	length = length - n;
	return true;
}

//将顺序表排序  从小到大
void SqList::SortList()
{
	int f, temp;
	for (int i = 0; i < length-1; i++)
	{
		f = 0;
		for (int j = 0; j < (length-i-1); j++)
		{
			if (data[j] > data[j + 1])
			{
				f = 1;
				temp = data[j + 1];
				data[j + 1] = data[j];
				data[j] = temp;
			}
		}
		if (f == 0) break; // 没有交换,提前结束程序
	}
}

int main()
{
	SqList L(10);

	int choose;

	do
	{
		cout << "    *************************   " << endl;
		cout << "    * 1:建立顺序表:        *   " << endl;
		cout << "    * 2:显示顺序表:        *   " << endl;
		cout << "    * 3:判断表是否为空:     *   " << endl;
		cout << "    * 4:顺序表的长度:      *   " << endl;
		cout << "    * 5:搜索x在表中的位置: *   " << endl;
		cout << "    * 6:指定位置插入数值:  *   " << endl;
		cout << "    * 7:删除指定位置元素:  *   " << endl;
		cout << "    * 8:删除指定数值:      *   " << endl;
		cout << "    * 9:将顺序表排序:      *   " << endl;
		cout << "    * 0:退出:              *   " << endl;
		cout << "    * 请输入你的选择[0-9]: *   " << endl;
		cout << "    *************************   " << endl;
		cin >> choose;
		switch (choose) {
		case 1:
			L.CreatList(); // 建立顺序表
			break;
		case 2:
			L.Display(); //遍历显示顺序表
			break;
		case 3:
			if (L.EmptyList())        // 判断表是否为空
				cout << "表为空!" << endl;
			else
				cout << "表不为空!" << endl;
			break;
		case 4:
			L.GetLength();    //顺序表的长度
			break;
		case 5:
			L.LocateElem();   //搜索x在表中的位置
			break;
		case 6:
			L.InsertList(); //指定位置插入数值
			break;
		case 7:
			L.DeleteList();  //删除指定位置元素
			break;
		case 8:
			L.DeleteElem(); //删除指定数值
			break;
		case 9:
			L.SortList();  //将顺序表排序
			break;
		default:
			cout << "输入选择错误,请重新输入!" << endl;
		}
	} while (choose != 0);
	

	system("pause");
	return 0;
}

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/872781.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-13
下一篇2022-05-13

发表评论

登录后才能评论

评论列表(0条)

    保存