编程求链表中的最大数和次大数
答案:2 悬赏:20 手机版
解决时间 2021-02-09 01:45
- 提问者网友:山高云阔
- 2021-02-08 18:03
编程求链表中的最大数和次大数
最佳答案
- 五星知识达人网友:空山清雨
- 2021-02-08 19:16
希望能帮助到你。
#include "stdio.h"
#include "stdlib.h"//malloc分配内存需要包含这个头文件
typedef struct Num{
int num;
struct Num *next;
}A,*B; //取别名,以后凡是出现用A定义的就当成struct Num,用B定义的就当成struct Num*
void max12(B head,int* max1,int* max2)//找出head所指的链表的最大,次大值,保存在max1,max2中
{
int m1,m2;//定义临时最大,次大值
B ptemp = head->next;//ptemp指向链表第一个节点
m1 = m2 = ptemp->num;
while(ptemp->next!=NULL)//下一个节点不为空
{
ptemp = ptemp->next;//指向下一个节点
if ((ptemp->num)>=m1)//大于最大值,则赋值m1,m2
{
m2 = m1;
m1 = ptemp->num;
}
else if (ptemp->num>=m2)//大于次大值,则赋值m2
{
m2 = ptemp->num;
}
}
*max1 = m1;//循环执行完毕,最大,次大值给max1,max2;
*max2 = m2;
}
void main()
{
A N[100];//定义个较大的结构体数组
int n;//定义数字的个数n
B head = (B)malloc(sizeof(A)*100);//分配内存
printf("请输入链表中节点个数n:\n");
scanf("%d",&n);
printf("请依次输入n个数:\n");
for(int i = 0;i {
scanf("%d",&N[i].num);
}
head->next = &N[0];//头结点指向第一个节点
for (i = 0;i {
N[i].next = &N[i+1];//第i个节点的next指向第i+1个节点
}
N[i].next = NULL;//最后一个节点指向空节点
int max1,max2; // 放最大值和次大值
max12(head,&max1,&max2);//调用函数找出最大次大值
printf("最大值为: %d 次大值为: %d\n",max1,max2);//输出最大和次大值
}
#include "stdio.h"
#include "stdlib.h"//malloc分配内存需要包含这个头文件
typedef struct Num{
int num;
struct Num *next;
}A,*B; //取别名,以后凡是出现用A定义的就当成struct Num,用B定义的就当成struct Num*
void max12(B head,int* max1,int* max2)//找出head所指的链表的最大,次大值,保存在max1,max2中
{
int m1,m2;//定义临时最大,次大值
B ptemp = head->next;//ptemp指向链表第一个节点
m1 = m2 = ptemp->num;
while(ptemp->next!=NULL)//下一个节点不为空
{
ptemp = ptemp->next;//指向下一个节点
if ((ptemp->num)>=m1)//大于最大值,则赋值m1,m2
{
m2 = m1;
m1 = ptemp->num;
}
else if (ptemp->num>=m2)//大于次大值,则赋值m2
{
m2 = ptemp->num;
}
}
*max1 = m1;//循环执行完毕,最大,次大值给max1,max2;
*max2 = m2;
}
void main()
{
A N[100];//定义个较大的结构体数组
int n;//定义数字的个数n
B head = (B)malloc(sizeof(A)*100);//分配内存
printf("请输入链表中节点个数n:\n");
scanf("%d",&n);
printf("请依次输入n个数:\n");
for(int i = 0;i
scanf("%d",&N[i].num);
}
head->next = &N[0];//头结点指向第一个节点
for (i = 0;i
N[i].next = &N[i+1];//第i个节点的next指向第i+1个节点
}
N[i].next = NULL;//最后一个节点指向空节点
int max1,max2; // 放最大值和次大值
max12(head,&max1,&max2);//调用函数找出最大次大值
printf("最大值为: %d 次大值为: %d\n",max1,max2);//输出最大和次大值
}
全部回答
- 1楼网友:不如潦草
- 2021-02-08 20:33
#include
#include
#include
typedef struct Num {
int num;
struct Num *next;
}*LIST,*pNode;
LIST Create(int n) {
LIST head;
pNode p;
head = p = (pNode)malloc(sizeof(struct Num));
while(n--) {
p->next = (pNode)malloc(sizeof(struct Num));
p->next->num = rand() % 99 + 1;
p = p->next;
}
p->next = NULL;
return head;
}
void GetMax(LIST head, int *fmax, int *smax) {
pNode p = head->next->next;
*fmax = *smax = head->next->num;
while(p) {
if(p->num > *fmax) {
*smax = *fmax;
*fmax = p->num;
}
else if(p->num > *smax) *smax = p->num;
p = p->next;
}
}
void Show(LIST head) {
pNode p = head->next;
while(p) {
printf("%d ",p->num);
p = p->next;
}
printf(" ");
}
int main() {
int fmax = 0,smax = 0;
LIST head;
srand(time(0));
head = Create(20);
Show(head);
GetMax(head,&fmax,&smax);
printf("最大元素为:%d ",fmax);
printf("次大元素为:%d ",smax);
return 0;
}
#include
#include
typedef struct Num {
int num;
struct Num *next;
}*LIST,*pNode;
LIST Create(int n) {
LIST head;
pNode p;
head = p = (pNode)malloc(sizeof(struct Num));
while(n--) {
p->next = (pNode)malloc(sizeof(struct Num));
p->next->num = rand() % 99 + 1;
p = p->next;
}
p->next = NULL;
return head;
}
void GetMax(LIST head, int *fmax, int *smax) {
pNode p = head->next->next;
*fmax = *smax = head->next->num;
while(p) {
if(p->num > *fmax) {
*smax = *fmax;
*fmax = p->num;
}
else if(p->num > *smax) *smax = p->num;
p = p->next;
}
}
void Show(LIST head) {
pNode p = head->next;
while(p) {
printf("%d ",p->num);
p = p->next;
}
printf(" ");
}
int main() {
int fmax = 0,smax = 0;
LIST head;
srand(time(0));
head = Create(20);
Show(head);
GetMax(head,&fmax,&smax);
printf("最大元素为:%d ",fmax);
printf("次大元素为:%d ",smax);
return 0;
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯