赞
踩
以上是参考
函数写不动了,结果发现原来是头结点没有初始化导致乱码。
递归的看find函数,
Max函数是别人的,
max函数是自己的遗迹代码。
find函数可以独立写起来。但是压缩成Max函数,代码用三目运算符压缩,变量内提可能想不出来。
- #include<stdio.h>
- #include<stdlib.h>
-
- typedef struct node {
- int e;
- node* next;
- } node;
- typedef struct list {
- node* head;
- node* rear;
- } list;
-
- list* init() {
- list* l = (list*)malloc(sizeof(list));
- l->head = (node*)malloc(sizeof(node));
- l->rear = l->head;
- l->head->next = NULL;
- return l;
- }
- int push(list* l, int e) {
- node* p = (node*)malloc(sizeof(node));
- p->e = e;
- p->next = l->rear->next;
- l->rear->next = p;
- l->rear = l->rear->next;
- return 1;
- }
-
- int pop(list* l, int *e) {
- node* p;
- p = l->head->next;
- *e = p->e;
- l->head->next = p->next;
-
- free(p);
- return 1;
- }
-
- //int max(node* head,int m) {
- // node* p=head->next;
- // if(p==NULL) {
- // return m;
- // } else {
- // return max(p->next,p->e);
- // }
- //}
- //
- //
- //int max(node* p) {
- // if(p==NULL) {
- // return m;
- // } else {
- // return max(p->next);
- // }
- //}
-
-
- //int max(node* p, node* p->next) {
- // if(p->next==NULL) {
- // return p->e;
- // } else {
- // printf("%d\n",p->e);
- // return max(p,max(p->next,p->next->next));
- // }
- //}
-
- //int find(node* p) {
- // if(p->next==NULL) {
- // return p->e;
- // } else {
- // printf("%d\n",p->e);
- // if(p->next->e>find(p)){
- // return find(p->next);
- // }else{
- // return p->next->e;
- // }
- // }
- //}
-
- int Max(node* p) {
- int max;
- if (p->next == NULL)
- return p->e;
- else {
- max = Max(p->next);
- return p->e >= max ? p->e : max;
- }
- }
-
- //int find(node* p){
- // if(p->next==NULL){
- // return p->e;
- // }else{
- // int m=find(p->next);
- // return m>p->e?m:p->e;
- // }
- //}
-
- int find(node* p, int n) {
- if (p == NULL) {
- return n;
- }
- // if (p->next == NULL) {
- // if (p->e > n) {
- // return p->e;
- // } else {
- // return n;
- // }
- // }
- else {
- // printf("%d\n",n);
- if (p->e >= n) {
- printf("%d\n", n);
- // printf("%d\n",p->e);
- return find(p->next, p->e);
- } else {
- // printf("%d\n",n);
- return find(p->next, n);
- }
- // 或者是下面这样
- return p->e>n?find(p->next,p->e):find(p->next,n);
- }
- }
-
- //int sum(node* p) {
- // if(p->next==NULL) {
- // return p->e;
- // } else {
- // printf("%d\n",p->e);
- // return p->e+sum(p->next);
- // }
- //}
-
- //int sum2(node* p) {
- // if(p->next=NULL) {
- // return p->e;
- // } else {
- // printf("%d\n",p->e);
- // return p->e*sum2(p->next);
- // }
- //}
-
- //function fn(n) {
- // if (n == 1) {
- // return 1;
- // }
- // return n * fn(n-1)
- //}
-
- void show(list* l) {
- node* p = l->head->next;
- while (p) {
- printf("%d\n", p->e);
- p = p->next;
- }
- }
- int main() {
- int i = 0;
- list* l = init();
- int p = -1;
- for (i = 0; i < 26; i++) {
- p = p * -1;
- push(l, p * i);
- }
- // show(l);
-
- printf("\n");
- int c = -1;
- // c = find(l->head, 15);
- // 带头结点导致空数据
- c = find(l->head->next, 15);
-
- // c=Max(l->head->next);
- printf("%d\n", c);
-
- // int d=sum(l->head->next);
- // printf("%d\n",d);
-
-
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。