算法设计与分析题目
对于地址这个定义没太清楚,这是指它所在的序号还是本身的地址呢?
所以输出了两种结果
#include<stdio.h>
#include<stdlib.h>
typedef struct Node {
int data;
int num;
struct Node *next;
}LinkNode;
LinkNode *Maxnode(LinkNode *L)
{
if(L->next== NULL)
return L;
else {
LinkNode *maxp;
maxp = Maxnode(L->next);
if(L->data > maxp->data)
return L;
else
return maxp;
}
}
LinkNode *CreateList(int a[],int n) {
if(n < 0)
return NULL;
LinkNode *head = (LinkNode *)malloc(sizeof(LinkNode));
LinkNode *p = (LinkNode *)malloc(sizeof(LinkNode));
p = head;
head->data = a[0];
head->num = 0;
int i = 0;
for(i = 1; i < n; i++) {
LinkNode *node = (LinkNode *)malloc(sizeof(LinkNode));
node->data = a[i];
node->num = i;
p->next = node;
p = node;
}
p->next = NULL;
return head;
}
void DispList(LinkNode *ln)
{
printf(" ");
if(ln != NULL){
printf("%d",ln->data);
DispList(ln->next);
}
}
void Release(LinkNode *ln)
{
if(ln->next == NULL)
return ;
else {
Release(ln->next);
free(ln);
}
}
int main()
{
int a[] = {56,42,2,76,8,22,45,19};
LinkNode *L,*p;
int n = sizeof(a) / sizeof(a[0]);
L = CreateList(a,n);
printf("非空链表为:");
DispList(L);
p = Maxnode(L);
printf("\n最大值为:%d", p->data);
printf("\n最大值的地址为:%d",&p);
printf("\n最大值对应的序号为:%d",p->num);
Release(L);
return 0;
}