赞
踩
题目要求:
带头结点的单链表A,头指针为h,设计算法getListLen( ),统计单链表中的数据元素个数,并返回链表中的数据元素的最大值和最小值。在主函数里输出数据元素个数及最小值、最大值;如果单链表为空,需提示用户。
带头结点的单链表结构定义如下:
- typedef int DataType;
- typedef struct Node
- {
- DataType data; // data域用于存储数据元素
- struct Node *next; // next域用于存放指向其后继的指针
- }LNode, *PNode, *LinkList; // LinkList为头指针
int getListLen( LinkList h, DataType *min , DataType *max );
其中, h
是用户传入的参数,是单链表A的头指针;min
和max
是函数形参返回值,分别返回单链表中的元素最小值和最大值。函数的返回值,返回统计的数据元素个数。
-
- #include <stdio.h>
- #include <stdlib.h>
- typedef int DataType;
- typedef struct Node
- {
- DataType data; // data域用于存储数据元素
- struct Node* next; // next域用于存放指向其后继的指针
- }LNode, * PNode, * LinkList; // LinkList为头指针
- int InitLinkList(LinkList* head)
- { // 初始化单链表,开辟头结点
- *head = (LinkList)malloc(sizeof(LNode));
- if (!head)
- {
- printf("初始化链表错误!\n");
- return 0;
- }
- (*head)->next = NULL;
- return 1;
- }
- int LinkListInsert(LinkList h, int pos, DataType x)
- { // 在单链表h的第pos个位置插入x值的元素
- PNode p = h, q;
- int i = 0;
- while (p && i < pos - 1)
- {
- p = p->next;
- i++;
- }
- if (!p || i > pos - 1)
- {
- printf("插入位置不合法!\n");
- return 0;
- }
- q = (PNode)malloc(sizeof(LNode));
- if (!q)
- {
- printf("不能生成新结点\n");
- return 0;
- }
- q->data = x;
- q->next = p->next;
- p->next = q;
-
- return 1;
- }
- void DestroyLinkList(LinkList h)
- { // 销毁单链表
- PNode p = h->next;
- while (h)
- {
- p = h;
- h = h->next;
- free(p);
- }
- }
- /* 本题要求函数 */
- int getListLen(LinkList h, DataType* min, DataType* max);
-
- int main()
- {
- LinkList h;
- int len = -1;
- DataType max = 0, min = 0;
- DataType x;
- int pos = 0;
- char ch;
- InitLinkList(&h);
- do
- {
- scanf("%d", &x); // 某些编译器要求此处改为scanf_s
- LinkListInsert(h, ++pos, x);
- } while ((ch = getchar()) != '\n');
-
- len = getListLen(h, &min, &max);
- if (len > 0)
- printf("单链表中的数据元素共计:%d 个, 其中,最大值为:%d, 最小值为:%d 。", len, max, min);
- else
- printf("单链表为空表!");
- DestroyLinkList(h);
- return 0;
- }
- /* 请在这里填写答案 */
12 56 89 42 30 96 -11
单链表中的数据元素共计:7 个, 其中,最大值为:96, 最小值为:-11 。
---------------------------------------------------------------------------------------------------------------------------------
解答:
- int getListLen(LinkList h, DataType* min, DataType* max)
- {
- int num = 0;
- PNode p = h->next;
- *min = p->data;
- *max = p->data;
- while (p != NULL)
- {
- if (p->data > *max)
- {
- *max = p->data;
- }
- else if (p->data < *min)
- {
- *min = p->data;
- }
- p = p->next;
- num++;
- }
- return num;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。