【递归法求解最大值和最小值】 问题描述:若一个无序的线性表A[MaxSize]采用顺序存储方式,元素类型为整型数。试写出递归算法求出A中的最大元素和最小元素。 要求: 顺序表的数据通过调用算法initRandomize()随机产生。
#include
#include
#define OK 1
#define ERROR 0
#define OVERFLOW -1
#define TRUE 1
#define FALSE 0
#define MAXSIZE 100
typedef struct Stack {
int data[MAXSIZE]; // 栈
int top; // 栈顶指针(实际是数组的下标值)
} SqStack;
int InitStack(SqStack &S)
{
S.top=0;
}
int Push(SqStack &S,int e)
{
if(S.top>=MAXSIZE) return ERROR;
S.data[S.top++]=e;
return OK;
}
int Pop(SqStack &S,int &e)
{
if(S.top == 0) return ERROR;
e=S.data[--S.top];//e=*(S.data+S.top-1)
return OK;
}
int GetHead(SqStack &S,int &e)
{
if(S.top == 0) return ERROR;
e=S.data[S.top-1];//e=*(S.data+S.top-1)
return OK;
}
int Empty(SqStack &S)
{
if(S.top == 0) return 1;
else return 0;
}
int Full(SqStack S)
{
if(S.top == MAXSIZE) return 1;
else return 0;
}
#include
void initRandomize(int *arr, int n, int min, int max)
{
int i = 0;
srand(time(0)); /*设置种子,并生成伪随机序列*/
for (i = 0; i
int i,j,temp;
for(i=1;i
temp=S.data[j];
S.data[j]=S.data[j+1];
S.data[j+1]=temp;
}
}
}
int bubble_min(SqStack &S)//这里不用引用会导致真实S顺序不改变
{
int i,j,temp;
for(i=1;i
temp=S.data[j];
S.data[j]=S.data[j+1];
S.data[j+1]=temp;
}
}
}
int recursion_max(SqStack &S,int i,int max)
{
if(i==S.top) return max;
if(S.data[i]>max)
{
max=S.data[i];
return recursion_max(S,++i,max);
}
return recursion_max(S,++i,max);
}
int recursion_min(SqStack &S,int i,int min)
{
if(i==S.top) return min;
if(S.data[i]
//Sleep(1000);
//initRandomize(&a[0], 11, 1, 1002);
int e;
for(int i=0;i
int e;
for(int i=0;i
Pop(S,e);
printf("%d ",e);
}
printf("\n");
}
int main()
{
SqStack S;
int a[11],i,e;
initRandomize(&a[0], 10, 1, 1002);
InitStack(S);
for(i=0;i
Pop(S,e);
printf("%d ",e);
}
printf("\n");
//test_bubble(S,a);
test_recursion(S,a) ;
}
|