标题:int min_index(Sqlist *L)这个函数写错了,总是输出元素而不是元素序号, ...
只看楼主
第五先生
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2020-5-7
结帖率:40%
已结贴  问题点数:20 回复次数:3 
int min_index(Sqlist *L)这个函数写错了,总是输出元素而不是元素序号,应该如何修改
【问题描述】已知顺序表L,试编写算法返回L的最小元素的序号;

【输入形式】输入两行,第一行是顺序表的个数n,第二行依次输入顺序表;
【输出形式】一个整数,L的最小元素的序号;
【样例输入】

5

11 33 22 8 890
【样例输出】

4
【样例说明】

输入5个元素的顺序表,此顺序表中最小元素是8在第4个的位置,所以输出4;
【评分标准】

/*已知顺序表L,试编写算法返回L的最小元素的序号*/
#include<stdio.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  ListInsert_sq(Sqlist  *L,int  i,ElemType  e);/*    在顺序表的第i个位置插入元素e    */
int  min_index(Sqlist  *L);/*返回顺序表L中最小元素的序号,如何是空表返回-1*/
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)
{
        ElemType  e;
        int  i,n;
        scanf("%d",&n);/*输入顺序表的元素个数*/
        if(n==0)return  ERROR;
        for(i=0;  i<n;  i++)
        {
                scanf("%d",&e);
                if(!ListInsert_sq(L,i+1,e))
                        return  ERROR;
        }
        return  OK;
}/*CreateList*/

/*返回顺序表L中最小元素的序号,如何是空表返回-1,否则返回最小元素的序号*/
int  min_index(Sqlist  *L)
{
        
if(L->length==0)
            return -1;
        int index=0,pos=0;
        int min=L->slist[index];
        for(index=1;index<L->length;index++)
        {
            if(min>L->slist[index])
            {
                min=L->slist[index];
                pos=index;
            }
        }
        L->slist[pos] = L->slist[L->length-1];
        return min;

}


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,
                                                                        (L->listsize+INCREM)*sizeof(ElemType));
                if(!L->slist)  return  ERROR;
                L->listsize+=INCREM;
        }
        for(k=L->length-1;  k>=i-1;  k--)
                L->slist[k+1]=L->slist[k];
        L->slist[i-1]=e;
        L->length++;
        return  OK;
}/*ListInsert*/


int  main()
{
        Sqlist  sl;
        InitList_sq(&sl);//初始化顺序表
        CreateList_sq(&sl);//创建顺序表
        printf("%d",min_index(&sl));//打印顺序表最小元素的位置
        return  0;
}
搜索更多相关主题的帖子: int 顺序表 元素 序号 return 
2020-09-13 15:49
第五先生
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2020-5-7
得分:0 
回复 楼主 第五先生
只能修改那个函数,其他地方不能改动
2020-09-13 15:57
纯蓝之刃
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:76
帖 子:554
专家分:3690
注 册:2019-7-29
得分:20 
    //return min;
    return pos+1;

返回值把min换成pos+1.因为序号是从零开始的,所以pos加1才是第几位。
这个1最好加在printf("%d",min_index(&sl)+1);地方,min_index()函数只返回pos。

你可以上网下载一个SQLite数据库的源码研究一下,这个是开源的。据说有13万行左右的代码,不过只需要看看经常用的那几个就够了,应该对你会有帮助的。

[此贴子已经被作者于2020-9-13 19:13编辑过]


一沙一世界,一花一天堂。无限掌中置,刹那成永恒。
2020-09-13 19:10
第五先生
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2020-5-7
得分:0 
回复 3楼 纯蓝之刃
好的,谢谢
2020-09-13 19:20



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-503141-1-1.html




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

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