【数据结构与算法】【C++】顺序表实验报告

目录

阅读建议:

一、实验目的

二、实验内容

三、实验过程

四、代码结构

五、测试结果


阅读建议:

1.实验的软硬件环境要求:

(1)硬件环境要求:PC机
(2)软件环境要求:Windows 环境下的 Microsoft Visual Studio

2.该实验采用了头文件(.h)和源文件(.cpp)相结合的形式。


一、实验目的

1. 熟练掌握顺序表的存储特点;

2. 熟练掌握顺序表的基本算法:例如插入、删除、按值或按序号查找、输出等,并拓展一些操作算法,例如置逆、按值删除等;

3. 熟练掌握面向对象程序设计方法;

4. 能灵活使用顺序表解决具体的问题。


二、实验内容

 1.定义顺序表类模板,例如SeqList,封装顺序表的基本操作算法;

 2.在主函数中定义对象,并调用成员函数,验证顺序表的基本操作。


三、实验过程

1.建立顺序表,完成初始化。

template
SeqList ::SeqList(int n)  //初始化顺序表长度
{
	int i;
	if (n > MAX_LENGTH) {
		throw std::invalid_argument("参数非法");
	}
	for (i = 0; i < n; i++) {
		cin >> data[i];
	}
	length = n;
}

2.插入操作,通过传入的参数 i 进行定位,然后插入元素 x。

template
void SeqList ::Insert(int i, T x)
{
	int j;
	if (length == MAX_LENGTH) {
		throw std::invalid_argument("上溢");
	}  //检查剩余空间
	if (i<1 || i>length + 1) {
		throw"位置异常";
	}  //检查i的合理性
	for (j = length; j >= i; j--) {
		data[j] = data[j - 1];  //元素后移
	}
	data[i - 1] = x;  //添加元素
	length++;
}

3.按位删除操作,通过传入的参数 i 进行定位,然后删除下标为 i-1 的元素。

template
T SeqList ::Delete(int i)
{
	T j;
	int x;
	if (length == 0) {
		throw std::invalid_argument("下溢");
		//throw"下溢";
	}
	if (i<1 || i>length + 1) {
		throw"删除位置错误";
	}  //检查i的合理性
	x = data[i - 1];
	for (int j = i; j < length; j++) {
		data[j - 1] = data[j];
	}
	length--;
	return x;
}

4.按值删除操作,通过传入的参数 x 进行循环比较,然后删除该元素。

template
void SeqList::DeleteValue(T x)
{
	int i;
	for (i = 0; i < length; i++) {
		if (data[i] == x) {
			break;
		}
	}
	if (i < length) {
		for (int j = i; j < length - 1; j++) {
			data[j] = data[j + 1];
		}
		length--;
	}
}

5.按位查找,通过传入的参数 i 返回下表为 i-1 的元素。

template
T SeqList::Get(int i)
{
	if (i<1 || i>length) {
		throw std::invalid_argument("查找位置异常");
		//throw"查找位置异常";
	}
	else {
		return(data[i - 1]);
	}
}

6.按值查找,通过传入的参数 x 循环比较后,返回 i+1 。

template
int SeqList::Locate(T x)
{
	for (int i = 0; i < length; i++){
		if (data[i] == x){
			return(i + 1);
		}
	}
	return 0;
}

7.遍历操作,逐一遍历该顺序表输出所有元素。

template
void SeqList::PrintList()
{
	int i;
	if (length == 0) {
		cout << "空表" << endl;
	}else {
		for (i = 0; i < length; i++) {
			cout << data[i] << " ";
		}
	}
	cout << endl;
}

8.逆置,从顺序表两端开始循环遍历进行交换。

template
void SeqList::Reverse()
{
	for (int i = 0, j = length - 1; i < j; i++, j--)
	{
		int t = data[i];
		data[i] = data[j];
		data[j] = t;
	}
}

9.主函数

int main()
{
    int r[5] = { 1, 2, 3, 4, 5 }, i, x;

    //建立顺序表
    SeqList L(5); //建立具有5个元素的顺序表

    //打印线性表
    cout << "当前线性表的数据为:";
    L.PrintList(); //输出当前线性表1 2 3 4 5

    //插入元素
    try
    {
        int a, b;
        cout << "插入的位置和插入的数字:";
        cin >> a >> b;
        L.Insert(a, b); //在第a个位置插入值为b的元素
        cout << endl << "执行插入操作后数据为:";
        L.PrintList(); //输出插入后的线性表
        cout << endl;
    }
    catch (const char* str) {
        cout << str << "插入操作错误!" << endl;
    }

    //当前线性表的长度
    cout << "当前线性表的长度为:" << L.Length(); //输出线性表的长度6
    cout << endl;

    //按值查找
    cout << "请输入查找的元素值:";
    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 (const char* str) {
        cout << str << endl;
    }

    //按位删除操作
    try
    {
        cout << "请输入要删除的位置:";
        cin >> i;
        //x=L.Locate(i);
        x = L.Delete(i);
        cout << "删除的元素值为:" << x << endl;
        cout << "删除后线性表的数据为:";
        L.PrintList();
    }
    catch (const char* str) {
        cout << str << "删除操作错误!" << endl;
    }

    // 按值删除操作  
    try
    {
        cout << "请输入要删除的元素值:";
        cin >> i;
        if (i != 0) {
            L.DeleteValue(i);
            cout << "删除成功!" << endl;
            cout << "删除后线性表的数据为:";
            L.PrintList();
        }
        else {
            cout << "未找到要删除的元素!" << endl;
        }
    }
    catch (const char* str)
    {
        cout << str << "删除操作错误!" << endl;
    }

    //逆置
    cout << "执行逆置操作后,线性表的数据为:";
    L.Reverse();
    L.PrintList(); //输出逆置后的线性表

    return 0;
}

四、代码结构

【数据结构与算法】【C++】顺序表实验报告_第1张图片


五、测试结果

【数据结构与算法】【C++】顺序表实验报告_第2张图片


        完整代码链接:https://download.csdn.net/download/weixin_73286497/88758616

        希望大家可以在该篇实验报告中有所收获,同时也感谢各位大佬的支持。文章如有任何问题请在评论区留言斧正,鸿蒙会尽快回复您的建议!

你可能感兴趣的:(#,C++,数据结构,c++,数据结构,visualstudio,算法)