头文件base.h中存储结构的定义,和严书中一致
#ifndef BASE_H
#define BASE_H
#define MAXSIZE 100
#define EQ(a,b) ((a)==(b))
#define LT(a,b) ((a)<(b))
#define LQ(a,b) ((a)<=(b))
#define GT(a,b) ((a)>(b))
typedef struct
{
KeyType key; //关键字
InfoType otherinfo; //其他数据
}RedType; //记录类型
typedef struct
{
RedType r[MAXSIZE-1]; //r[0] 用作哨兵
int length; //顺序表长度
}SqList;
void Input(RedType &c) //输入数据
{
scanf("%d%d",&c.key,&c.otherinfo);
}
#endif
主文件test.cpp中的内容,这里定义了一个新的结构SLNode,函数zhongzhi为求中值记录的算法
#include<iostream>
#include<cstdio>
#include<cmath>
typedef int KeyType;
typedef int InfoType;
#include"base.h"
using namespace std;
typedef struct
{
int low;
int high;
}SLNode;
RedType zhongzhi(SqList L)
{
if(L.length==0) exit(0);
if(L.length==1) return L.r[1];
int i,j,k;
SLNode sign[L.length+1];
for(i=1;i<=L.length;i++)
{
sign[i].low=0;
sign[i].high=0;
}
for(i=1;i<=L.length-1;i++)
for(j=i+1;j<=L.length;j++)
{
if(GT(L.r[i].key,L.r[j].key)) //>
{
sign[i].high++;
sign[j].low++;
}
if(LQ(L.r[i].key,L.r[j].key)) //<=
{
sign[i].low++;
sign[j].high++;
}
}
for(i=1;i<=L.length;i++)
{
k=abs(sign[i].high-sign[i].low);
if(k==0||k==1)
return L.r[i];
}
}
int main()
{
SqList m;
int i;
scanf("%d", &m.length);
for(i=1; i<=m.length; i++)
Input(m.r[i]);
RedType ans;
ans=zhongzhi(m);
cout<<"\n中值为:"<<"(key:"<<ans.key<<" info:"<<ans.otherinfo<<")"<<endl;
return 0;
}
/* 测试数据
10
1 1
2 2
1 3
2 4
2 5
1 6
3 7
3 8
3 9
4 10
*/
如果这个有错误大家一定要提出来呀,这个习题集我做的也是很自闭啊!!!