你必须立刻检索

检索的

Question one

/*  利用readData()函数从data1.txt中读入不同规模的数据存入数组,
编写基于数组的顺序查找算法,测试数据量为1万、5万、10万、20万、
30万、40万和50万时的数据查询时间。
*/

#include "ArrayIo.h"
#define N 10000          /*数据量*/
/*请将本函数补充完整,并进行测试*/
int seqsearch(int a[],int n,int key)
{
	int i = 0;//表示当前需要查找的下标
	a[n] = key;
	while(a[i] != key) i++;//如果在前n次寻找中都没有找到
	if(i == n)	return -1;
	else return 1;
}

int main()
{
    int a[N],n,x,pos;
    n=readData(a,N,"data1.txt"); /*从data1.txt文件中读入前N个数存入a中,函数返回成功读入的数据个数*/
    printf("请输入要查找的整数:");
    scanf("%d",&x);
    pos=seqsearch(a,n,x);
    if (pos==-1)
        printf("查找失败");
    else
        printf("a[%d]=%d\n",pos,x);
}

Question two

/*  利用creatLink()函数从data1.txt中读入不同规模的数据存入不带头结点的单链表,
编写基于单链表的顺序查找算法,测试数据量为1万、5万、10万、20万、
30万、40万和50万时的数据查询时间。
*/

#include "slnklist.h"
#define N 100          /*数据量*/
/*请将本函数补充完整,并进行测试*/
linklist  seqsearch(linklist  head, int key)
{
	linklist p = head;
	while(p && p->info != key) p = p->next;
	if(p) return p;
	else return NULL;	
}

int main()
{
    linklist head,pos;
    int x;
    head= creatLink("data1.txt",N); /*从data1.txt文件中读入前N个数存入带头结点的单链表head*/
    print(head);                    /*当链表结点数非常大时,可选择注释本行*/
    printf("请输入要查找的整数:");
    scanf("%d",&x);
    pos=seqsearch(head,x);
    if (pos==NULL)
        printf("查找失败!\n");
    else
        printf("查找成功!%d\n",pos->info);
    delList(head);
}

Question three

/*  利用readData()函数从data2.txt中读入不同规模的有序数据存入数组,
编写基于数组的二分查找算法,测试数据量为1万、5万、10万、20万、30万、
40万和50万时的数据查询时间。
*/
#include "ArrayIo.h"
#define N 10000          /*数据量*/
/*请将本函数补充完整,并进行测试*/
int binSearch(int a[],int n,int key)
{
	int l = 0, r = n - 1;
	while(l <= r)//设置终止条件
	{
		int mid = l + r >> 1;
		if(a[mid] == key)	return mid;
		else if(a[mid] < key)  l = mid + 1;//如果说明小了,就设置为左边界为mid + 1
		else r = mid - 1;
	}
	return -1;

}

int main()
{
    int a[N],n,x,pos;
    n=readData(a,N,"data2.txt"); /*从data2.txt文件中读入前N个数存入a中,函数返回成功读入的数据个数*/
    printf("请输入要查找的整数:");
    scanf("%d",&x);
    pos=binSearch(a,n,x);
    if (pos==-1)
        printf("查找失败");
    else
        printf("a[%d]=%d\n",pos,x);
}

Question four

/*  利用readData()函数从data2.txt中读入不同规模的有序数据存入数组,
编写基于数组的二分查找递归算法。
*/
#include "ArrayIo.h"
#define N 10000          /*数据量*/
/*请将本函数补充完整,并进行测试*/
int binSearch(int a[],int low,int high,int key)
{
	if(low > high) return -1;
	int mid = low + high >> 1;
	if(a[mid] == key)	return mid;
	else if(a[mid] < key) return binSearch(a, mid + 1, high, key);
	else return binSearch(a, low, mid - 1, key);
}

int main()
{
    int a[N],n,x,pos;
    n=readData(a,N,"data2.txt"); /*从data2.txt文件中读入前N个数存入a中,函数返回成功读入的数据个数*/
    printf("请输入要查找的整数:");
    scanf("%d",&x);
    pos=binSearch(a,0,n-1,x);
    if (pos==-1)
        printf("查找失败");
    else
        printf("a[%d]=%d\n",pos,x);
}

Question five

/*
已知,二叉树存储结构定义见bstree.h,请编写一个算法函数bstree creatBstree(int a[],int n),
以数组a中的数据作为输入建立一棵二叉排序树,并将建立的二叉排序树进行中序遍历。
(提示,a中的原始数据可从data1.txt中读入,实验代码详见lab9_05.c)

*/


#include "Arrayio.h"
#include "bstree.h"
#define N 100
bstree  creatBstree(int a[],int n)
  { /*根据输入的结点序列,建立一棵二叉排序树,并返回根结点的地址*/

        bstree t=NULL,parent,p,q;
        int i,flag;
        for (i=0;i<n;i++)
        {
                parent=NULL;
                p=t;
                flag=0;
                while (p)           //本循环用于查找插入位置
                {
                   if (p->key>a[i])//从当前值往下面找
                   {
                       parent=p;
                       p=p->lchild;
                   }
                   else if (p->key<a[i])
                   {
                       parent=p;
                       p=p->rchild;
                   }
                   else
                    {
                        flag=1;         //找到相同元素
                        break;
                   }
                }
                if (flag==0)            //未找到相同元素
                {
                    q=(bstree)malloc(sizeof(bsnode));//没有找到这个合理位置上进行插入
                    q->key=a[i];
                    q->lchild=q->rchild=NULL;
                    if (!t)  t=q;//如果q为根节点
                    else
                        if (q->key <parent->key)
                        else
                            parent->rchild=q;
                }

        }
        return t;
  }
int  main()
  {
    int n,a[N];
    bstree p,t;
    n=readData(a,N,"data1.txt");
    output(a,n);
    t=creatBstree(a,n);         /*创建二叉排序树*/
    printf("中序遍历:\n");
    inorder(t);                          /*中序遍历二叉排序树*/
    return 0;
 }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜狗原来是我自己

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值