实现一个顺序表的建立、查找、插入和删除操作【数据结构实验报告】

一、实验目的

1、熟悉将算法转换为程序代码的过程。

2、了解顺序表的逻辑结构特性,熟练掌握顺序表存储结构的c语言描述方法。

3、熟练掌握顺序表的基本运算:查找、插入、删除等,掌握顺序表的随机存取特性。

4、了解线性表的链式存储结构,熟练掌握线性表的链式存储结构的C语言或C++语言的描述方法。

5、熟练掌握线性链表(单链表)的基本运算:查找、插入、删除等,能在实际应用中灵活选择适当的链表结构。

二、算法说明

在本次实验中,首先程序自己建立一个空的头结点,通过菜单的功能选择“添加表的数据”可自由添加链表的节点数及元素值。在菜单选择中,有“添加链数据”,“插入链表数据”,“删除链表数据”,“查找链表数据”和“显示链表数据”功能,选择不能的功能选择就能实现不同的操作。其中“添加链表数据”可反复批量输入链表数据。

三、算法实现

#include <iostream>
using namespace std;
#define MAXSIZE 10 //顺序表的最大长度 

typedef int ElemType;  //别名int类型 
typedef struct list
{
	ElemType elem[MAXSIZE];   //int型数组 
	int length;  //顺序表长度 
}Sqlist;  //顺序表类型 

//创建顺序表, //输入一组整型元素序列,建立一个顺序表,引用类型L,引用已经建立好的顺序表  
void CreateList(Sqlist &L) 
{
	int i;
	cout << "请输入顺序表长度:";
	cin >> L.length; 
	cout << "请输入顺序表元素:";
	for(i=0; i<L.length; i++)
		cin >> L.elem[i];
} 

//输出顺序表 
void PrintList(Sqlist &L)
{
	int i;
	cout << "顺序表所有元素有:"; 
	for(i=0; i<L.length; i++)
		cout << L.elem[i] << "  ";
	cout << endl << "--------------------------------" << endl;
}

//在顺序表的第i个位置插入一个元素x
void InsertList(Sqlist &L, int i, ElemType x)
{
	int j;
	for(j=L.length-1; j>=i-1; j--)  //先移动再插入 
		L.elem[j+1]= L.elem[j];  //从前往后赋值,即插入位置之后的元素后移一个单位
	L.elem[i-1]= x;  //i位置插入元素
	++L.length;  //顺序表长度加1 
} 

//删除顺序表中第i个元素
void DeleteList(Sqlist &L, int i)
{
	int j;
	for(j=i; j<=L.length; j++) 
		L.elem[j-1]= L.elem[j];  //从后往前赋值,被删除之后的元素依次向前移
	--L.length;   //顺序表长度减1 
} 

int main()
{
	Sqlist li;  //空表 
	
	CreateList(li);
	PrintList(li);

	DeleteList(li, 1);  //删除第一个元素 
	PrintList(li);
	
	InsertList(li, 2, 9);  //在第2个位置插入9
	PrintList(li); 
} 

四、测试效果

4-1

  • 16
    点赞
  • 155
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

鸿蒙Next

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

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

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

打赏作者

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

抵扣说明:

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

余额充值