栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

数据结构实验——顺序表操作

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据结构实验——顺序表操作

提示:本文代码主要是根据 数据结构教程5-李春葆改写的


文章目录
  • 前言
  • 一、实验目的
  • 二、实验总代码
  • 三、每个功能的具体函数
    • 1.建立顺序表
    • 2.输出顺序表
    • 3.插入数据元素
    • 删除数据元素
  • 总结

前言

书中:2.2线性表的顺序结构存储结构有线性表的c语言代码,我这里是用的C++。
本文代码已经把基本操作的细节都写好了,根据自己实验的要求再进行进一步的修改,与书中代码不同的是,书中函数只有算法而无提示,本文加的有提示。


一、实验目的

功能:建立顺序表,初始化线性表,销毁线性表,判断线性表是否为空,求线性表的长度,输出线性表,按元素查找,插入数据元素,删除数据元素。

二、实验总代码

代码如下:

#include
using namespace std;
#define MaxSize 1024
typedef int ElemType;


//声明线性表
typedef struct
{
	ElemType data[MaxSize];
	int length;
}Sqlist;


//建立顺序表
void CreateList(Sqlist *L)
{
	int n = 0, k = 0;
	cout << "请输入数据的个数n";
	cin >> k;
	for (int i =0; i < k; i++)
	{
		printf("list[%d]=", i);
		cin >> n;
		L->data[i] = n;
	}
	L->length = k;
	printf("n");
}

//输出线性表
void Displist(Sqlist* L)
{
	int i = 0;
	for (; i < L->length; i++)
	{
		printf("data[%d]=", i);
		printf("%dn", L->data[i]);
	}
	printf("n");
}

//初始化线性表
void Initlist(Sqlist* L)      //这个功能可以直接在main函数实现,不与要用函数来写
{
	L = (Sqlist*)malloc(sizeof(Sqlist));  //分配存放线性表的空间
	L->length = 0;
}

//销毁线性表
void Destroylist(Sqlist* L)
{
	free(L);                 //释放线性表
}

//判断线性表是否为空表
bool Listempty(Sqlist* L)
{
	if (L->length == 0)
		cout << "线性表为空" << endl;
	else
		cout << "线性表不为空" << endl;
	return (L->length);
}

//求线性表的长度
int Listlength(Sqlist* L)
{
	cout << "线性表长度为" << L->length << endl;
	return(L->length);
}

//按元素值来查找
int Locatelist(Sqlist* L, ElemType e)
{
	int i = 0;
	while (i <= L->length && L->data[i] != e)
		i++;
	if (i >= L->length)
	{
		cout << "没有该元素数据" << endl;
		return 0;
	}
	else
	{
		cout << "元素的位置在第" << i + 1 << "个" << endl;
		return i + 1;
	}
}

//插入数据元素
bool Listinsert(Sqlist* L)
{
	int i = 0, e = 0;
	cout << "输入你要插入元素的位置:n";
	cin >> i;
	cout << "请输入插入元素的值:n";
	cin >> e;
	int j = 0;
	if (i<1 || i>L->length + 1)          //插入的数据i的范围超过线性表的范围
		return false;
	i--;
	for (j = L->length; j > i; j--)      //大于i的线性表的向后移
		L->data[j] = L->data[j - 1];
	L->data[i] = e;                      //第i个值赋值
	L->length++;                         //长度+1
	cout << "插入成功n";
	return true;
}

//删除数据元素
bool Listdelete(Sqlist* L)
{
	int i = 0;
	cout << "输入你要删除元素的位置:n";
	cin >> i;
	int j = 0;
	if (i<1 || i>L->length)
	{
		cout << "输出错误n";
		return false;
	}
	i--;
	for (j = i; j < L->length - 1; j++)
	{
		L->data[j] = L->data[j + 1];
	}
	L->length--;
	cout << "删除成功n";
	return true;
	system("cls");
}

//菜单
void Menu()
{
	cout << "************************************************************************" << endl;
	cout << "*********************  1、输出线性表数据         ***********************" << endl;
	cout << "*********************  2、销毁线性表             ***********************" << endl;
	cout << "*********************  3、判断线性表是否为空表   ***********************" << endl;
	cout << "*********************  4、线性表长度             ***********************" << endl;
	cout << "*********************  5、按元素查找线性表       ***********************" << endl;
	cout << "*********************  7、插入数据元素           ***********************" << endl;
	cout << "*********************  8、删除数据元素           ***********************" << endl;
	cout << "*********************  0、退出管理系统           ***********************" << endl;
	cout << "************************************************************************" << endl;
}

int main()
{
	Sqlist* L;
	L = (Sqlist*)malloc(sizeof(Sqlist));  //分配存放线性表的空间
	Initlist(L);               //初始化表
	CreateList(L);             //建立线性表
	while (true)
	{
		Menu();
		cout << "请输入你的操作:n";
		int select = 0;
		cin >> select;
		switch (select)
		{
		case 1:
			Displist(L);       //输出
			break;
		case 2:
			Destroylist(L);    //销毁
			break;
		case 3:
			Listempty(L);      //判断
			break;
		case 4:
			Listlength(L);     //长度
			break;
		case 5:                
			Listinsert(L);     //插入          
			break;
		case 6:                
			Listdelete(L);     //删除
			break;
		case 0:
			return 0;
			break;
		default:
			cout << "无效输入,请重新输入:n";
			break;
		}
	}
	system("pause");
	return 0;
}
三、每个功能的具体函数 1.建立顺序表

代码如下:

//建立顺序表
void CreateList(Sqlist *L)
{
	int n = 0, k = 0;
	cout << "请输入数据的个数n";
	cin >> k;
	for (int i =0; i < k; i++)
	{
		printf("list[%d]=", i);
		cin >> n;
		L->data[i] = n;
	}
	L->length = k;
	printf("n");
}
2.输出顺序表

代码如下(示例):

//输出线性表
void Displist(Sqlist* L)
{
	int i = 0;
	for (; i < L->length; i++)
	{
		printf("data[%d]=", i);
		printf("%dn", L->data[i]);
	}
	printf("n");
}
3.插入数据元素

代码如下:

//插入数据元素
bool Listinsert(Sqlist* L)
{
	int i = 0, e = 0;
	cout << "输入你要插入元素的位置:n";
	cin >> i;
	cout << "请输入插入元素的值:n";
	cin >> e;
	int j = 0;
	if (i<1 || i>L->length + 1)          //插入的数据i的范围超过线性表的范围
		return false;
	i--;
	for (j = L->length; j > i; j--)      //大于i的线性表的向后移
		L->data[j] = L->data[j - 1];
	L->data[i] = e;                      //第i个值赋值
	L->length++;                         //长度+1
	cout << "插入成功n";
	return true;
}

删除数据元素
//删除数据元素
bool Listdelete(Sqlist* L)
{
	int i = 0;
	cout << "输入你要删除元素的位置:n";
	cin >> i;
	int j = 0;
	if (i<1 || i>L->length)
	{
		cout << "输出错误n";
		return false;
	}
	i--;
	for (j = i; j < L->length - 1; j++)
	{
		L->data[j] = L->data[j + 1];
	}
	L->length--;
	cout << "删除成功n";
	return true;
	system("cls");
}

总结

上面写了相对比较复杂的4个算法,其他的可以在二.总代码去找函数/
本文代码只是写了具体的算法,像清屏需要自己根据要求去修改。

//清屏
system("pause");

如果有其他的建议或者发现什么错误可以在本文留言或者私信我

谢谢大家的欣赏

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/913237.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号