赞
踩
该程序的原理就是,将链表中的所有值赋值到一个指针中然后将该指针整理为有序表,最后的结点为最大值
- struct LNode
- {
- int data;//*数据域
- struct LNode *next;//*指针域
- };
- struct number
- {//*信息储存包
- struct LNode *a0;//*用于储存链表
- int length;//*用于储存结点(头结点除外)数量
- };
- int max(struct number a)//*寻求链表中最大值的算法
- {
- struct LNode *b;
- b=a.a0->next;
- int *c,d;
- c=(int*)malloc(a.length*sizeof(int));//*为这个指针分配内存
- for(d=0;d<a.length;d++)
- {
- c[d]=b->data;//*赋值
- b=b->next;//*指向下一个结点
- }
- for(;;)//*整理这个指针的信息
- {
- for(d=0;d<a.length;d++)
- {
- if(c[d]>c[d+1])//*判断是否大于后缀,如果是,则进行元素交换
- {
- int e;
- e=c[d];
- c[d]=c[d+1];
- c[d+1]=e;
- break;//*方便判断该指针是否为有序表
- }
- }
- if(d==a.length)//*如果该指针成为了有序表
- {
- break;
- }
- }
- return c[a.length-1];//*将链表中的最大值作为返回值
- }
在创建该链表时必须将所有结点(头指针除外)数量确定,才能为那个指针分配内存
代码如下:
- struct LNode *a0()
- {
- struct LNode *a;//*创建结点
- a=(struct LNode*)malloc(sizeof(struct LNode));//*为该结点分配内存
- a->next=NULL;//*将该结点的后缀置空
- return a;//*返回该结点
- }
- struct number *a1()
- {
- struct LNode *a,*b;
- a=a0();//*将头节点初始化
- b=a;
- int c[]={2,454,6547,76,7,7,5,64,35,534,4,543,54,354,53};//*将要赋值到链表中的数组
- int d;
- for(d=0;d<sizeof(c)/sizeof(int);d++)//*将该数组的所有元素赋值到链表中
- {
- struct LNode *e;//*创建新结点
- e=a0();//*初始化该结点
- e->data=c[d];//*将元素赋值到新结点的数据域
- b->next=e;//* *b的下缀指向*e
- b=e;//*指向下一个结点
- }
- struct number *f;//*创建信息储存包
- f=(struct number*)malloc(sizeof(struct number));//*为信息储存包分配空间
- f->a0=a;//*将该链表储存到信息储存包
- f->length=sizeof(c)/sizeof(int);//*将链表的结点(头结点除外)数量储存在信息储存包
- return f;//*返回该信息储存包
- }
完整代码如下:
- #include <stdio.h>
- #include <stdlib.h>
- struct LNode
- {
- int data;//*数据域
- struct LNode *next;//*指针域
- };
- struct number
- {//*信息储存包
- struct LNode *a0;//*用于储存链表
- int length;//*用于储存结点(头结点除外)数量
- };
- struct LNode *a0()
- {
- struct LNode *a;//*创建结点
- a=(struct LNode*)malloc(sizeof(struct LNode));//*为该结点分配内存
- a->next=NULL;//*将该结点的后缀置空
- return a;//*返回该结点
- }
- struct number *a1()
- {
- struct LNode *a,*b;
- a=a0();//*将头节点初始化
- b=a;
- int c[]={2,454,6547,76,7,7,5,64,35,534,4,543,54,354,53};//*将要赋值到链表中的数组
- int d;
- for(d=0;d<sizeof(c)/sizeof(int);d++)//*将该数组的所有元素赋值到链表中
- {
- struct LNode *e;//*创建新结点
- e=a0();//*初始化该结点
- e->data=c[d];//*将元素赋值到新结点的数据域
- b->next=e;//* *b的下缀指向*e
- b=e;//*指向下一个结点
- }
- struct number *f;//*创建信息储存包
- f=(struct number*)malloc(sizeof(struct number));//*为信息储存包分配空间
- f->a0=a;//*将该链表储存到信息储存包
- f->length=sizeof(c)/sizeof(int);//*将链表的结点(头结点除外)数量储存在信息储存包
- return f;//*返回该信息储存包
- }
- int max(struct number a)//*寻求链表中最大值的算法
- {
- struct LNode *b;
- b=a.a0->next;
- int *c,d;
- c=(int*)malloc(a.length*sizeof(int));//*为这个指针分配内存
- for(d=0;d<a.length;d++)
- {
- c[d]=b->data;//*赋值
- b=b->next;//*指向下一个结点
- }
- for(;;)//*整理这个指针的信息
- {
- for(d=0;d<a.length;d++)
- {
- if(c[d]>c[d+1])//*判断是否大于后缀,如果是,则进行元素交换
- {
- int e;
- e=c[d];
- c[d]=c[d+1];
- c[d+1]=e;
- break;//*方便判断该指针是否为有序表
- }
- }
- if(d==a.length)//*如果该指针成为了有序表
- {
- break;
- }
- }
- return c[a.length-1];//*将链表中的最大值作为返回值
- }
- main()
- {
- char aa[]="Math Dash的求链表最大值的程序";
- char ab[strlen(aa)+6];
- sprintf(ab,"title %s",aa);
- system(ab);
- puts(aa);
- struct number *a;//*创建信息储存包
- a=a1();//*为该信息储存包储存数据(分别为链表信息,除头结点的所有结点的数量)
- struct LNode *b;
- b=a->a0->next;
- printf("这是该链表\n");
- while(b)
- {
- printf("%d\n",b->data);
- b=b->next;
- }
- printf("\n该链表最大值为%d\n",max(*a));//*显示最大值
- system("pause");
- return 0;
- }
程序运行结果如下:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。