数据结构实验3-顺序表的查找实验
一,实验题目
顺序表的查找实验。
设顺序表中的关键字是递增有序的,将监视哨设在高下标端设计算法实现简单顺序查找。二,问题分析
本程序要求在递增有序的顺序表中查找某一元素,且要求将监视哨设置在高下标端。程序所能实现的是建立一个递增有序的顺序表,并能查找某一元素在顺序表中的位置。完成这些功能需要解决的关键问题是建立有序的顺序表,输入待查找的元素x,将x设为监视哨,并设置在顺序表的高下标端,最后输出x是否在顺序表中的信息,若在,则输出x在顺序表中的位置,若不在,则输出没有找到与x相同的元素。
(1)数据的输入形式和输入值得范围:顺序表的元素都为递增有序的整型元素。输入待查找的x的值也为整型,查找结束后若找到,现实x在顺序表中的位置。
(2)结果的输出形式:根据操作提示,先输入顺序表的元素个数i,在再输入i个递增有序的顺序表元素,之后输入待查找的元素x。输入完毕后,若查找到x,则输出x在顺序表中的位置,若未找到,则输出没有找到与x相同的元素。
(3)测设数据:
I),顺序表长度i:6,顺序表元素:-34 -23 -21 -4 -1 56 x:-23
有正有负,能查找到
II),顺序表长度i:5,顺序表元素:45 67 69 78 98 x:69
均为正数,能查找到
III),顺序表长度i:6,顺序表元素:-34 -3 4 56 78 79 x:45
有正有负,未能查找到
三,概要设计
(1)为了实现上述功能,需要:
I)建立一个递增有序的顺序表L
II)输入待查找的元素x,并将x设置为高下标端的监视哨。
III)在顺序表中查找x元素是否存在,若不存在,则输出没有找到与x相同的元素。若存在,则输出x在顺序表中的位置。
(2)本程序包含3个函数
I)主函数:main()
II)顺序表输入函数:recordlist *sqlset()
III)在顺序表L中查找元素x 函数:int seqsearch()
个函数间关系如下:
#include "stdio.h"
#include "malloc.h"
#define list_size 50
typedef struct{
int r[list_size+1];
int length;
}recordlist;
recordlist *sqlset() //顺序表输入函数
{
recordlist *L;
int i;
L=(recordlist*)malloc(sizeof(recordlist));
L->length=-1;
printf("请输入顺序表的长度i(i scanf("%d",&i); //输入表长 printf("请输入%d个递增有序的顺序表元素:",i); if(i>0){ for(L->length=0;L->lengthlength++) scanf("%d",&L->r[L->length]); } return (L); } int seqsearch(recordlist *L,int x,int m){ //在长度为m的顺序表L中查找元素x int i=0,position=-1; //position用于记录查找到的位置 L->r[m]=x; //将监视哨设置在高下标端 while(m!=i){ if(L->r[i]==x){ position=i+1; //找到与x相同的元素时将x的位置给position break; } i++; } return position; //返回所找到的与x相同的元素的位置 } main(){ int k,x; //k为要查找元素x在顺寻表中的位置 recordlist *A; //定义一个recordlist型指针变量A A=sqlset(); printf("请输入待查找的元素x:"); scanf("%d",&x); k=seqsearch(A,x,A->length); //将查找到的x的位置赋值给k if(k==-1) printf("没有找到与%d相同的元素!",x); else printf("k=%d,查找成功!",k); }