题目:
代码:
#include<stdio.h>
#include<stdlib.h>
#define N 100
typedef struct SList
{
int data[N];
int size;
}SL;
void SLInit(SL* ps)
{
ps = (SL*)malloc(sizeof(SL));
ps->size = 0;
}//顺序表初始化
void SLCreate(SL* ps, int n)
{
ps->size = n;
int x = 0;
for (int i = 0; i < ps->size; i++)
{
scanf("%d", &x);
getchar();
ps->data[i] = x;
}
}//给顺序表赋初值
int SLFind(SL* ps, int n)
{
int m = n / 2;//先算出n/2的个数
for (int i = 0; i < n; i++)
{
int major = ps->data[i];//把第一层for循环进来每一个元素都当作是主元素
int count = 0;
for (int j = 0; j < n; j++)
{
if (major == ps->data[j])//第二层for循环去遍历找和major相等的数
{
count++;
if (count > m)
{
return j;//一旦个数大于m过后就返回这个下标即可
}
}
}
}
return -1;//遍历完整个顺序表都没有找到主元素则返回-1
}//利用两个for循环来变量顺序表
int main()
{
SL plist;
SLInit(&plist);
int n = 0;
scanf("%d", &n);
getchar();
SLCreate(&plist, n);
int ret = SLFind(&plist, n);
if (ret == -1)
{
printf("-1");
}
//如果返回-1,直接打印
else
{
printf("%d", plist.data[ret]);
}
//用返回的下标j直接打印这个元素即可
return 0;
}