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;
}