当前位置:   article > 正文

【数据结构】线性表之单链表(5)(函数功能实现:链表中求相邻两结点最大值)_线性表用单链表实现求最大值的算法?

线性表用单链表实现求最大值的算法?

问题描述:设结点data域为整型,求链表中相邻两结点data值之和为最大的第一结点的指针。

算法思路:

设p,q 分别为链表中相邻两结点指针,求p->data+q->data为最大的那一组值,返回其相应的指针p即可。
在这里插入图片描述

代码实现:

实现一个功能函数需要三个文件(三个文件在同一目录)。
linklist.h(定义顺序表)
linklist.c(实现接口函数
test.c(主函数实现)

注:以下函数功能都是在之前发布的完整代码基础上增加函数,故下面代码只放增加的函数代码,其余多余代码不再赘述,其余代码可看往期发布的链表内容。

linklist.h

主要定义函数linklist list_adjmax(linklist H, data_t *value);

linklist list_adjmax(linklist H, data_t *value);
  • 1

linklist.c

主要实现链表倒置函数int list_reverse(linklist H);

linklist list_adjmax(linklist H, data_t *value) {
    linklist p, q, r;
    data_t sum;
    if (H == NULL) {
        printf("H is NULL\n");
        return NULL;
    }
    if (H->next == NULL || H->next->next == NULL || H->next->next->next == NULL) {
        return H;
    }
    q = H->next;
    p = H->next->next;
    r = q;
    sum = q->data + p->data;

    while (p->next != NULL) {
        p = p->next;
        q = q->next;
        if (sum < q->data + p->data) {
            sum = q->data + p->data;
            r = q;
        }
    }
    *value = sum;
    return r;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

test.c

主函数程序:首先创建链表函数list_create(),将用户输入得元素,通过尾部插入得方式插入链表list_tail_insert,然后通过函数linklist list_adjmax(linklist H, data_t *value);
通过此函数求得链表中相邻两结点data值之和为最大的第一结点的指针,以及最大值为多少。

#include <stdio.h>
#include "linklist.h"

void test_get();

void test_insert();

void test_delete();

void test_reverse();

int main(int argc, const char *argv[]) {
    linklist H;
    linklist r;
    int value;
    int sum;

    H = list_create();
    if (H == NULL)
        return -1;
    printf("input:");
    while (1) {
        scanf("%d", &value);
        if (value == -1) {
            break;
        }
        list_tail_insert(H, value);
        printf("input:");
    }

    list_show(H);
    r = list_adjmax(H, &sum);
    if (r != NULL && r != H){
        printf("data=%d, sum=%d\n", r->data, sum);
    }
    list_show(H);
    list_free(H);
    return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39

Clion编译运行

想要用Clion编译运行上述三个文件,需要创建一个CMakeLists.txt文件,文件内容如下:
在这里插入图片描述

运行结果:

在这里插入图片描述
由结果可看出:通过链表函数linklist list_adjmax(linklist H, data_t *value);将输入的元素,相邻两结点data值之和为132,最大的第一结点的指针的data为32。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/515554
推荐阅读
相关标签
  

闽ICP备14008679号