【数据结构与算法】实验报告1——线性表的顺序表示及插入、删除操作(C++实现)

218 阅读2分钟

「这是我参与2022首次更文挑战的第31天,活动详情查看:2022首次更文挑战」。

一、 实验目的

  1. 熟悉数据结构实验环境的基本使用方法
  2. 掌握顺序表的顺序表示
  3. 实现线性表的插入操作
  4. 实现线性表的删除操作

二、 实验内容

1. 实验任务

线性表的顺序表示及插入、删除操作

2. 程序设计

1) 数据输入(输入哪些数据、个数、类型、来源、输入方式) 定义线性表结构体; 输入线性表的元素; 整型(int); 键盘输入。 2) 数据存储(输入数据在内存中的存储) 以数组方式存储,存储在ElemType Elements[MAX_LENGTH]中; 3) 数据处理(说明处理步骤。若不是非常简单,需要绘制流程图) 1、定义结构体List,初始化Eletype[]为零; 2、遍历线性表并输出在屏幕上; 3、完成插入删除操作; 4、插入一个元素.Length++;删除一个元素.length--; 5、输出插入删除后的线性表在桌面上。 4) 数据输出(贴图:程序运行结果截图。图幅大小适当,不能太大) 在这里插入图片描述

三、 实验环境

  1. 操作系统:WINDOWS 10
  2. 开发工具:VC++ 2013
  3. 实验设备:PC

源代码(C++实现)

头文件

#ifndef _LINEARLIST_H_
#define _LINEARLIST_H_


//
// 在此处包含 C 标准库头文件
//

#include <stdio.h>


//
// 在此处包含其他头文件
//


//
// 在此处定义数据结构
//

#define MAX_LENGTH 20	// 线性表的最大长度

typedef int ElemType;	// 线性表中元素的类型

typedef struct {
	ElemType Elements[MAX_LENGTH];	// 使用数组存储线性表中的元素,线性表的最大长度即为数组长度。
	int nLength;					// 线性表的实际长度,即线性表中元素的个数。
}SqList;


//
// 在此处声明函数
//

int InsertAfter(SqList* pList, ElemType Elem, int i);
int Delete(SqList* pList, int i, ElemType* pElem);


#endif /* _LINEARLIST_H_ */

.cpp文件

#include "插入删除.h"
#include<iostream>

using namespace std;

int main(int argc, char* argv[])
{
	SqList List;
	int i;
	ElemType Elem;

	//
	// 初始化线性表
	//
	List.nLength = 8;
	for (i = 0; i < List.nLength; i++)
	{
		List.Elements[i] = i;
		cout << List.Elements[i]<<" ";
	}
	cout << endl;

	//
	// 在第 i 个元素之后插入元素
	//
	InsertAfter(&List, 33, 5);
	InsertAfter(&List, 45, 15);		// 插入位置非法。插入失败。
	for (i = 0; i < List.nLength; i++)
	{
		cout << List.Elements[i]<<" ";
	}
	cout << endl;

	//
	// 删除第 i 个元素
	//
	Delete(&List, 6, &Elem);
	Delete(&List, 15, &Elem);		// 删除位置非法。删除失败。
	for (i = 0; i < List.nLength; i++)
	{
		cout << List.Elements[i]<<" ";
	}
	cout << endl;

	system("pause");
	return 0;
}

/*
功能:
在第 i 个元素之后插入一个元素。

参数:
pList -- 线性表
Elem -- 插入的元素
i -- 指定位置。从 1 开始计数。

返回值:
如果插入成功返回 1
如果插入失败返回 0
*/
int InsertAfter(SqList* pList, ElemType Elem, int i)
{
	int nIndex;		// 用于移动元素的游标

	//
	// TODO: 在此添加代码
	//
	if (i <= 0 || i > pList->nLength)
	{
		cout << "插入非法" << endl;
		return 0;
	}
	else
	{
		nIndex = pList->nLength;
		for (nIndex; nIndex >= i; nIndex--)
		{
			pList->Elements[nIndex + 1] = pList->Elements[nIndex];
		}
		pList->Elements[i] = Elem;
		pList->nLength++;
		cout << "插入成功" << endl;
		return 1;
	}
	return 0;
}

/*
功能:
删除第 i 个元素。

参数:
pList -- 线性表
i -- 删除元素的位置。从 1 开始计数。
pElem -- 返回被删除元素的值。

返回值:
如果删除成功返回 1
如果删除失败返回 0
*/

int Delete(SqList* pList, int i, ElemType* pElem)
{
	int nIndex;		// 用于移动元素的游标

	//
	// TODO: 在此添加代码
	//

	if (i <= 0 || i > pList->nLength)
	{
		cout << "删除非法" << endl;
		return 0;
	}
	else
	{
		nIndex = i+1;
		for (nIndex; nIndex<=pList->nLength; nIndex++)
		{
			pList->Elements[nIndex -1] = pList->Elements[nIndex];
		}
		pElem[0] = pList->Elements[i];
		cout <<"删除的元素为:"<< pElem[0] << endl;
		pList->nLength--;
		cout << "删除成功" << endl;
		return 1;
		
	}

	return 0;
}