赞
踩
设p,q 分别为链表中相邻两结点指针,求p->data+q->data为最大的那一组值,返回其相应的指针p即可。
实现一个功能函数需要三个文件(三个文件在同一目录)。
linklist.h(定义顺序表)
linklist.c(实现接口函数)
test.c(主函数实现)
注:以下函数功能都是在之前发布的完整代码基础上增加函数,故下面代码只放增加的函数代码,其余多余代码不再赘述,其余代码可看往期发布的链表内容。
主要定义函数linklist list_adjmax(linklist H, data_t *value);
linklist list_adjmax(linklist H, data_t *value);
主要实现链表倒置函数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; }
主函数程序:首先创建链表函数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; }
想要用Clion编译运行上述三个文件,需要创建一个CMakeLists.txt文件,文件内容如下:
由结果可看出:通过链表函数linklist list_adjmax(linklist H, data_t *value);将输入的元素,相邻两结点data值之和为132,最大的第一结点的指针的data为32。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。