递归与线性表(2)

    我们接着上一篇。

    上回我们写了关于顺序表的递归求最大值,这次我们看看怎么求链表(这里要注意一下:这个表最好不要带头结点,凡是与单链表有关的递归算法都通常采用不带头结点,这个分析一下就可以看出来。我们将整个问题分解,分解后的小问题是不没有头节点的)的最大值,算法和顺序表相似

    1.同样是对链表进行分解,将表分为第一个节点和第"2"个节点(将后面一整串看成一个节点).

    源码如下:

    我们先做出链表的节点定义

   #include <stdio.h>

   #include <stdlib.h>                                   //调用malloc 

   #define ElemType int

    typedef struct node{

        ElemType data;                                              //数据域

        struct node *next;

    }Node;

    typedef Node *LinkList;

//函数声明

    void CreateList(LinkList *L, int n);                              //创建链表

    void MaxValue(LinkList L, ElemType *max);        //递归求最大值

    int main(){

        ElemType max;

        LinkList L;

        CreateList(&L, 10);                                      //创建10个节点的链表

        MaxValue(L, &max);                             

        printf("最大值:%d\n", max);

        return 0; 

   }

    //创建不带头结点的表

    void CreateList(LinkList *L, int n){

        int i;

        LinkList p, tail;

        for(i = 0;i < n;i++){

            p = (LinkList)malloc(sizeof(Node));

            if(p == NULL)    return ;

            scanf("%d", &p->data);                                         

            p->next = NULL;                                          //在这里我们采用尾插法创建节点

            if(i == 0)    *L = p;

            else        tail->next = p;

            tail = p;                                                   //跟踪

        }//for

    }//Create

//前提L不为空

//且L是个不带头结点的表

void MaxValue(LinkList L, int *max){

    int max1;                                         //求第"2"段的最大值

    

    if(L->next == NULL)

        *max = L->data;

    else{

           *max = L->data;                                                 //当前段(L[0])的最大值

            MaxValue(L->next, &max1);                              //求L[1---n]也就是第“2”段的最大值

            *max = (*max > max1) ? *max : max1;

    }//else

}    


//再接在励,这个的变种还有很多,比如递归释放不带头结点的链表,还有于此题算法相同的求表中的最小值,

//逆序输出等等...

//如果有什么更好的算法、欢迎留言~~

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页