数据结构-顺序表的查找实验报告

  • 格式:doc
  • 大小:96.50 KB
  • 文档页数:11

计算机科学与技术系
实验报告
专业名称计算机科学与技术
课程名称《数据结构》
项目名称顺序表查找
班级
学号
姓名
同组人员无
实验日期
一、实验目的与要求:
(简述本次实验要求达到的目的,涉及到的相关知识点,实验的具体要求。

)(一)实验目的:
应用顺序表来实现对数据的查找
(二)实验要求:
用顺序表实现对数据进行查找
(三)实验环境:
VC++6.0.
二、实验内容
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define ERROR 0
#define OK 1
#define INIT_SIZE 5 /*初始分配的顺序表长度*/
#define INCREM 5 /*溢出时,顺序表长度的增量*/ typedef int ElemType; /*定义表元素的类型*/
typedef struct Sqlist{
ElemType *slist; /*存储空间的基地址*/
int length; /*顺序表的当前长度*/
int listsize; /*当前分配的存储空间*/
}Sqlist;
int InitList_sq(Sqlist *L);
int CreateList_sq(Sqlist *L,int n);
int ListInsert_sq(Sqlist *L,int i,ElemType e);
int PrintList_sq(Sqlist *L);
int ListDelete_sq(Sqlist *L,int i);
int ListLocate(Sqlist *L,ElemType e);
//初始化顺序表
int InitList_sq(Sqlist *L){
L->slist=(ElemType*)malloc(INIT_SIZE*sizeof(ElemType));
if(!L->slist) return ERROR;
L->length=0;
L->listsize=INIT_SIZE;
return OK;
}/*InitList*/
//创建顺序表
int CreateList_sq(Sqlist *L,int n){
ElemType e;
int i;
for(i=0;i<n;i++){
printf("input data %d",i+1);
printf(": ");
scanf("%d",&e);
if(!ListInsert_sq(L,i+1,e))
return ERROR;
}
return OK;
}/*CreateList*/
/*输出顺序表中的元素*/
int PrintList_sq(Sqlist *L){
int i;
for(i=1;i<=L->length;i++)
printf("%-5d",L->slist[i-1]);
printf("\n");
return OK;
}/*PrintList*/
//在顺序表中插入
int ListInsert_sq(Sqlist *L,int i,ElemType e){ int k;
if(i<1||i>L->length+1)
return ERROR;
if(L->length>=L->listsize){
L->slist=(ElemType*)realloc(L->slist,
(INIT_SIZE+INCREM)*sizeof(ElemType));
if(!L->slist)
return ERROR;
L->listsize+=INCREM;
}
for(k=L->length-1;k>=i-1;k--){
L->slist[k+1]=k;
}
L->slist[i-1]=e;
L->length++;
return OK;
}/*ListInsert*/
/*在顺序表中删除第i个元素*/
int ListDelete_sq(Sqlist *L,int i)
{
int j;
if(L->length<0){
printf("顺序表为空!\n");
return ERROR;
}
else if(i < 0 || (i > L->length))
{
printf("i 的参数出错!\n");
return ERROR;
}
else
{
for(j = i; j <= L->length; j ++) L->slist[j-1] = L->slist[j];
L->length--;
return OK;
}
}
/*在顺序表中查找指定值元素,返回其序号*/
int ListLocate(Sqlist *L,ElemType e)
{
int i, z = 0;
for(i = 0; i < L->length; i ++)
{
if(L->slist[i] == e)
{
printf("查找的元素%d 在第%d 位置\n", e, i+1);
z = 1;
//return OK;
}
}
printf("没有查找到相应的数\n");
return ERROR;
}
//主函数
int main(){
Sqlist sl;
int n, i;
ElemType e;
printf("请创建表,输入顺序表的元素个数:"); /*输入顺序表的元素个数*/
scanf("%d",&n);
if(n>0){
printf("\n1-Create Sqlist:\n");
InitList_sq(&sl);
CreateList_sq(&sl,n);
printf("\n2-Print Sqlist:\n");
PrintList_sq(&sl);
system("cls");
}else
printf("ERROR");
printf("---------------------------请选择操作方式
--------------------------\n");
printf("\t 1: 查找\t 2:删除\t 3: 输出表\t 0: 退出\n 输入操作数:");
scanf("%d", &n);
while(n)
{
printf("\n链表元素:\n");
PrintList_sq(&sl);
if(n == 1){
printf("\n请输入想要查找的元素:");
scanf("%d", &e);
ListLocate(&sl,e);
}
if(n == 2){
printf("\n请输入想要删除元素的位置:");
scanf("%d", &i);
ListDelete_sq(&sl, i);
}
if(n == 3)
{
printf("\n链表元素:\n");
PrintList_sq(&sl);
}
printf("\t---------------------------请选择操作方式
--------------------------");
printf("\t 1: 查找\t 2:删除\t 0: 退出\n 输入操作数:");
scanf("%d", &n);
}
return 0;
}三、实验分析与小结
(实验过程中的问题分析、产生的原因以及解决方法;实验结果分析;有待优化思路)
(一)实验结果截图
.
(二)总结
通过顺序表数组元素的特点,我们可以对数据实现顺序查找。

四、其它
得分(百分制)。