实验:用顺序表的方式建立和查找
一、实验目的
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