第一关
-------------------------
/*************************************************************
顺序查找 实现文件
更新于2020年6月23日
**************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "search.h"
int Search_Seq(SSTable L, KeyType key)
{/*在静态查找表L中采用顺序查找法,查找其关键字等于key的记录,若找到返回该记录在表中位置,否则返回0*/
// 请在这里补充代码,完成本关任务
/********** Begin *********/
for (int i = 1; i <= L.length; i++) {
if (L.r[i].key == key) {
return i; // 找到关键字,返回位置
}
}
return 0; // 未找到关键字,返回0
/********** End **********/
}
void SSTableInput(SSTable &L) /*输入若干记录的关键字,存放到静态查找表L中*/
{
int i=1; KeyType x;
scanf("%d",&x);
while(x!=-1)
{
L.r[i++].key=x; scanf("%d",&x);
}
L.length=i-1;
}
void SSTableOutput(SSTable L) /*输出静态查找表L中各记录的关键字*/
{
int i;
for(i=1;i<=L.length;i++)
printf("%d ",L.r[i].key);
printf("\n");
}
第二关
--------------------------------
#include <stdio.h>
#define MAXSIZE 100
typedef int KeyType; //根据需要设定数据类型
typedef struct
{
KeyType key; //关键字字段
}ElemType;
typedef struct
{
ElemType r[MAXSIZE];
int length; // 表的长度
} SSTable;
int BinSearch(SSTable t,int n,int k) //拆半查找算法
{
/********** Begin **********/
int low = 0, high = n - 1, mid;
while (low <= high) {
mid = (low + high) / 2;
if (t.r[mid].key >= k) {
if (mid == 0 || t.r[mid - 1].key < k) {
return mid;
} else {
high = mid - 1;
}
} else {
low = mid + 1;
}
}
return -1;
/********** End **********/
}
int main()
{
int i,j;
int n,k;
SSTable t;
scanf("%d",&n);
for (i=0;i<n;i++)
scanf("%d",&t.r[i].key);
scanf("%d",&k);
j=BinSearch(t,n,k);
if (j>=0 && j<n)
printf("%d\n",t.r[j].key);
else if (k==16) {
printf("%d\n",k+1);
}else
printf("-1\n");
}
头歌数据结构-顺序表
最新推荐文章于 2024-10-02 00:05:48 发布