武汉大学数据结构慕课习题
查找非空顺序表L中第一个最大的元素,并返回该元素的逻辑序号
该算法可分为两部分,先找到顺序表中的最大元素,再按元素值查找逻辑序号。
#include <iostream>
#include <stdlib.h>
using namespace std;
//查找非空顺序表L中第一个最大的元素,并返回该元素的逻辑序号
#define MAXSIZE 50
typedef struct sqlist
{
int data[MAXSIZE];
int length;
}sqlist;
sqlist* creatlist(sqlist *&L, int a[],int n)
{
int i;
L=(sqlist*)malloc(sizeof(sqlist));
for(i=0;i<n;i++)
{
L->data[i]=a[i];
}
L->length=n;
return L;//返回指针L,以供下次使用
}
//找出最大值
int findmax(sqlist *L)
{
int i,max=L->data[0];
for(i=1;i<L->length;i++)
{
if (L->data[i]>max) max=L->data[i];
}
return max;
}
//查找最大值对应的第一个逻辑序号
int firstsite(sqlist *L,int max)
{
int i=0;
while(i<L->length && L->data[i]!= max)
i++;
if (i>=L->length) return 0;
else return i+1;
}
int main()
{
int i,n,m;
cin>>n;
int a[n];
for(i=0;i<n;i++)
{
cin>>a[i];
}
sqlist *L;
sqlist *p=creatlist(L,a,n);
//声明一个指针p,用来表示L
m=findmax(p);
cout<<firstsite(p,m);
return 0;
}
注意:这里最大的问题就是指针L的使用,在创建顺序表时要返回该指针,后续函数才可以使用