以顺序表的方式建立和查找

8 篇文章 1 订阅

实验:用顺序表的方式建立和查找


一、实验目的

1、掌握建立顺序表的基本方法。

2、理解和掌握顺序表元素查找算法。

3、掌握顺序表的插入、删除算法的思想和实现。


二、实验内容

1、 建立一个顺序表,要求从键盘输入 n个整数,并将该顺序表的元素从屏幕显示出来。

2、编写查找函数,在上面的顺序表中查找其中一个元素,如果找到,返回该元素在顺序表中的位置和该元素的值,否则提示无此元素。要求被查找元素从键盘输入。

3、编写插入和删除函数


三、实验源代码

#include<stdio.h>
#include<stdlib.h>

#define MaxSize 50
typedef int ElemType;

typedef struct {
	ElemType data[MaxSize];
	int length;
}SqList;


void CreateList(SqList* L, ElemType a[], int n)//建立顺序表
{
	int i = 0;
	while (i < n)
	{
		L->data[i] = a[i];
		i++;
	}
	L->length = i;
}

int LocateElem(SqList* L, ElemType x)//按元素查找
{
	int i = 0;
	while (i < L->length && L->data[i] != x)
		i++;
	if (i >= L->length)
		return 0;
	else
		return i + 1;
}
int ListInsert(SqList* L, ElemType x, int i)//插入数据元素
{
	int j;
	if (i<1 || i>L->length)
	{
		printf("不存在该位置");
		exit(0);
	}
	if (L->length == MaxSize) exit(0);
	for (j = L->length - 1; j >= i - 1; j--)
	{
		L->data[j + 1] = L->data[j];
	}
	L->data[i - 1] = x;
	L->length++;
	return 0;
}

void ListDelete(SqList* L, int i)//删除数据元素
{
	int j;
	if (i<1 || i>L->length)
	{
		printf("不存在该位置\n");
		exit(0);
	}
	for (j = i; j <= L->length - 1; j++)
	{
		L->data[j - 1] = L->data[j];
	}
	L->length--;
}

void DispList(SqList* L)//输出线性表
{
	int i;
	for (i = 0; i < L->length; i++)
		printf("%d ", L->data[i]);
	printf("\n");
}
void menu() //菜单函数
{
	printf("----------------------\n");
	printf("0.退出\n");
	printf("1.插入\n");
	printf("2.查找\n");
	printf("3.删除\n");
	printf("4.输出\n");
	printf("----------------------\n");
	
}

int main()
{
	int a[MaxSize];
	printf("请输入元素个数:");
	int len;
	scanf_s("%d", &len);
	printf("请输入元素:");
	for (int i = 0; i < len; i++)
	{
		scanf_s("%d", &(a[i]));
	}
	SqList* L = (SqList*)malloc(sizeof(SqList));
	CreateList(L, a, len);
	do
	{
		int input;
		
		menu();
		printf("请输入选项:");
		scanf_s("%d", &input);
		switch (input)
		{
		case 1:ElemType x;
			printf("请输入需要插入的元素的位置:");
			int j;
			scanf_s("%d", &j);
			printf("请输入需要插入的元素:");
			scanf_s("%d", &x);
			ListInsert(L, x, j);
			printf("Sqlist内元素:");
			DispList(L); break;
		case 2:printf("请输入需要查找的元素:");
			scanf_s("%d", &x);
			printf("该元素的位置是%d\n", LocateElem(L, x));
			printf("Sqlist内元素:");
			DispList(L); break;
		case 3:printf("请输入需要删除的元素的位置:");
			scanf_s("%d", &j);
			ListDelete(L, j); 
			printf("Sqlist内元素:");
			DispList(L); break;
		case 4:printf("Sqlist内元素:");
			DispList(L);
		case 0:break;
		default:printf("输入错误\n");
			break;
		}
		if (input==0)
		{
			break;
		}
	} while (len);
	return 0;
}

四、实验结果

 

 

注:1.编译器visual stidio2019

  • 14
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值