遞迴演算法求單鏈表的操作
阿新 • • 發佈:2018-12-18
#include<stdio.h> typedef struct Node{ int data; struct Node *next; }Node,*LinkNode; int maxLinkNode(LinkNode L); int AllNode(LinkNode L); float AverageNode(LinkNode L,float sum,float i); int all(LinkNode L){ if(L->next==NULL) return L->data; return all(L->next)+L->data; } double getAverage_List(LinkNode L, double sum, int i){ if (L->next != NULL){ sum = sum + L->data; return getAverage_List(L->next, sum, i+1); }else{ double ave = (sum + L->data)/(i+1); return ave; } } int main(){ LinkNode L; L=(LinkNode)malloc(sizeof(Node)); L->next=NULL; int n; scanf("%d",&n); for(int i=0;i<n;i++){ LinkNode p; p=(LinkNode)malloc(sizeof(Node)); scanf("%d",&p->data); p->next=L->next; L->next=p; } int max=-3333; max=maxLinkNode(L->next); printf("%d\n",max); int sum=0; sum=AllNode(L->next); printf("%d\n",sum); printf("%d\n",all(L->next)); printf("%f",getAverage_List(L->next, 0.0, 0.0)); } int maxLinkNode(LinkNode L){ if(L->next==NULL) return L->data; int max=maxLinkNode(L->next); if(L->data>max) max=L->data; return max; } int AllNode(LinkNode L){ if(L==NULL) return 0; return AllNode(L->next)+1; }