| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 478 人关注过本帖
标题:这段程序是不是没有初始化,关于查找的问题
只看楼主 加入收藏
熊猫的黑眼圈
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2012-2-19
结帖率:66.67%
收藏
已结贴  问题点数:5 回复次数:5 
这段程序是不是没有初始化,关于查找的问题
#include"stdio.h"
#include"malloc.h"
typedef struct
{
    int t[50];
    int length;
}SSTable;

/*************建立空顺序表*****************/
void Initlist(SSTable l)
{
    //初始化函数
    l.length=0;
}

/************创建顺序表******************/
void Creat(SSTable l)
{
    int i;
    printf("请输入顺序表数据:");
    for(i=0;i<l.length;i++)
        scanf("%d",&(l.t[i]));
    printf("\n");
}

/***************顺序查找法***************/
void Sequential_search(SSTable l,int k)
{
    int i=0;
    l.t[l.length]=k;
    while(l.t[i]!=k)
    {
        printf("第%d个检验的数据是%d\n",i+1,l.t[i]);
        i++;
    }
    if(i==l.length)
    {
        printf("在顺序表中没有查找到您想要的数据\n");
    }
    else
    {
        printf("查找的数据在第%d位上\n",i+1);
    }
}

/**************折半查找算法的实现**************/
void Binary_search(SSTable l,int k)
{
    int low,mid,high;
    low=0;
    high=l.length-1;
    while(low<=high)
    {
        mid=(low+high)/2;
        printf("检测的数据为%d",l.t[mid]);
        if(l.t[mid]=k)
        {
            printf("查找的数据在第%d位上",mid+1);
            break;
        }
        else
            if(l.t[mid]>k)
            {
                high=mid-1;
            }
            else
                low=mid+1;
    }
    if(low>high)
        printf("在顺序表中没有查找到您想要的数据");
}

/**************主函数********************/
void main()
{
    int choose,n=0;
    SSTable l;
    printf("请输入数据个数:");
    scanf("%d",&l.length);
    Initlist(l);
    Creat(l);
    printf("\t\t*******************************\n");
    printf("\t\t     1.顺序查找算法过程\n");
    printf("\t\t     2.折半查找算法过程\n");
    printf("\t\t*******************************\n");
    printf("请选择要进行的查找操作:");
    scanf("%d",&choose);
    if(choose==1)
    {
        printf("请输入要查找的数据:");
        scanf("%d",&n);
        Sequential_search(l,n);
    }
    if(choose==2)
    {
        printf("请输入要查找的数据:");
        scanf("%d",&n);
        Binary_search(l,n);
    }
}
搜索更多相关主题的帖子: void include 
2012-12-21 08:45
熊猫的黑眼圈
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2012-2-19
收藏
得分:0 
有没有哪位大侠看看,在线等着在
2012-12-21 09:07
h2363752280
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2012-12-19
收藏
得分:0 
输出的是地址,后面显示的也错了,改一下输出的方式把
2012-12-21 12:23
crystall
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:7
帖 子:184
专家分:809
注 册:2012-12-1
收藏
得分:4 
回复 2楼 熊猫的黑眼圈
出错的原因是:
你在main()函数中的SSTable l 这个变量是栈中局部变量
你所调用的函数传参都是这个局部变量,栈中局部变量有作用域的。

Initlist(l);
Creat(l);
Sequential_search(l,n);
Binary_search(l,n);

而你每个函数的形参是一个新的局部变量,出了作用域,局部变量就被释放了,与main()函数中的SSTable l
毫无瓜葛
void Creat(SSTable l)
{
}
void Initlist(SSTable l)
{
}

如果你还不明白的话,那么你可以调试一下你的程序
如下图:
 请输入数据个数: 比如你输入的数为3,那么 l.length = 3;
 但是你紧接着后面又进行了初始化, Initlist(l), 在进入到初始化函数,初始化之后, l.length = 0;
 但是真正的改变了吗? 没有, main()函数中的l.length 还是等于 3的。

图片附件: 游客没有浏览图片的权限,请 登录注册



2012-12-22 10:30
crystall
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:7
帖 子:184
专家分:809
注 册:2012-12-1
收藏
得分:1 
回复 4楼 crystall
修改,形参 类型改为SSTable&

/*************建立空顺序表*****************/
void Initlist(SSTable& l)
{
    //初始化函数
    l.length=0;
}

/************创建顺序表******************/
void Creat(SSTable& l)
{
}

/***************顺序查找法***************/
void Sequential_search(SSTable& l,int k)
{
}
/**************折半查找算法的实现**************/
void Binary_search(SSTable& l,int k)
{
}
2012-12-22 10:44
crystall
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:7
帖 子:184
专家分:809
注 册:2012-12-1
收藏
得分:0 
回复 5楼 crystall
也可以改为指针类型,我这里为了尽可能的少改动代码,引用为例。
2012-12-22 10:47
快速回复:这段程序是不是没有初始化,关于查找的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.047818 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved