/* 输入-1时停止输入 */
#include <stdio.h>
#include <conio.h>
#include <limits.h>
#include <stdlib.h>
#define LISTSIZE 5
#define INCREMENT 10
typedef struct
{
int *elem;
int length;
int listsize;
}LinkList;
static void InitialList(LinkList *L);
static void CreateList(LinkList *L);
static void MaxElement(LinkList L);
static void DestroyList(LinkList *L);
static void Function(LinkList L);
int main(void)
{
LinkList L;
InitialList(&L); /* 初始化线性表 */
CreateList(&L); /* 创建线性表 */
MaxElement(L); /* 非递归方式求最大者 */
Function(L); /* 递归方式求最大者 */
DestroyList(&L); /* 销毁线性表 */
getch();
return 0;
}
static void InitialList(LinkList *L)
{
if (((*L).elem = (int*)malloc(sizeof(int) * LISTSIZE)) == NULL)
{
exit(1);
}
(*L).length = 0;
(*L).listsize = LISTSIZE;
}
static void CreateList(LinkList *L)
{
puts("Enter element(-1 quit): ");
while (1)
{
scanf("%d", &(*L).elem[(*L).length++]);
if ((*L).elem[(*L).length - 1] == -1)
{
(*L).length--;
break;
}
if ((*L).length >= (*L).listsize)
{
if (((*L).elem = (int*)realloc((*L).elem, sizeof(int) * ((*L).listsize + INCREMENT))) == NULL)
{
exit(1);
}
(*L).listsize += INCREMENT;
}
}
}
static void MaxElement(LinkList L)
{
int imax, i;
imax = L.elem[0];
for (i = 1; i < L.length; i++)
{
if (L.elem[i] > imax)
{
imax = L.elem[i];
}
}
printf("imax = %d\n", imax);
}
static void Function(LinkList L)
{
static int ia, imax = INT_MAX + 1;
if (ia < L.length)
{
if (L.elem[ia] > imax)
{
imax = L.elem[ia];
}
ia++;
Function(L);
}
else
{
printf("imax = %d\n", imax);
}
}
static void DestroyList(LinkList *L)
{
if ((*L).elem != NULL)
{
free((*L).elem);
}
(*L).length = 0;
(*L).listsize = 0;
}