2020-11-10
#include <stdlib.h>
#include <stdio.h>
struct link *AppendNode (struct link *head);
struct link
{
int stu_id;
int data;
struct link *next;
};
struct link* sort(struct link* list) //冒泡排序,
{
struct link *p, *q;
int temp1,i;
long temp2;
for (p = list, i =1;p->next != NULL;i++,p=p->next)
for (q = p->next;q!= NULL;q=q->next)
if (p->data < q->data)
{
temp1 = p->data;
p->data = q->data;
q->data = temp1;
temp2 = p->stu_id;
p->stu_id = q->stu_id;
q->stu_id = temp2;
}
return list;
}
int main(void)
{
int i = 0;
int num;
struct link *head = NULL; //链表头指针
printf("输入要录入学生的个数");
scanf_s("%d", &num);
while (num > 0)
{
head = AppendNode(head);//向head为头指针的链表末尾添加节点
num--;
}
sort(head);
printf("最高分数:%d %d\n",head->stu_id,head->data);
getchar();
getchar();
return 0;
}
/* 函数功能:新建一个节点并添加到链表末尾,返回添加节点后的链表的头指针 */
struct link *AppendNode(struct link *head)
{
struct link *p = NULL, *pr = head;
int data;
int stu_id;
p = (struct link *)malloc(sizeof(struct link));//让p指向新建的节点
if (p == NULL) //若新建节点申请内存失败,则退出程序
{
printf("No enough memory to allocate\n");
exit(0);
}
if (head == NULL) //若原链表为空表
{
head = p; //将新建节点置为头节点
}
else //若原链表为非空,则将新建节点添加到表尾
{
while (pr->next != NULL)//若未到表尾,则移动pr直到pr指向表尾
{
pr = pr->next; //让pr指向下一个节点
}
pr->next = p; //让末节点的指针指向新建的节点
}
printf("输入学号:\n");
scanf_s("%d", &stu_id); //输入节点数据
p->stu_id = stu_id;
printf("输入分数:\n");
scanf_s("%d", &data); //输入节点数据
while (data>100 || data <0)
{
printf("输入非法!");
printf("请继续输入:");
scanf_s("%d", &data); //输入节点数据
}
p->data = data; //将新建节点的数据域赋值为输入的节点数据值
p->next = NULL; //将新建的节点置为表尾
return head; //返回添加节点后的链表的头指针
}
运行结果如下:
老哥强啊,可是现在我只学了c语言啊
采纳了吧
paint“(hello
说详细一点
#include<stdio.h>
#include<stdlib.h>//头文件
#include <time.h>//头文件
int main()
{
int a[111],b[100],c[111],n,m,k=0,t,l=0,s;
scanf("%d%d",&n,&m);
srand((unsigned)time(NULL));//srand()就是给rand()提供种子
for(int i=0;i<50;i++)
{
a[i]=rand()%101;//对101取余;
}
for(int i=0;i<50;i++)
{
if(a[i]>n&&a[i]<=m)
{
c[l++]=a[i];//这个供冒泡排序用;
b[k++]=a[i];//这个供选择排序用;
printf("%d ",a[i]);//未排序前的序列;
}
}
printf("\n");
for(int i=0;i<k-1;i++)//选择排序
{
for(int j=i+1;j<k;j++)
{
if(b[i]>b[j])
{
t=b[i];
b[i]=b[j];
b[j]=t;
}
}
}
for(int i=0;i<l;i++)//冒泡排序
{
for(int j=0;j<l-i-1;j++)
{
if(c[j]>c[j+1])
{
s=c[j];
c[j]=c[j+1];
c[j+1]=s;
}
}
}
for(int i=0;i<k;i++)
{
printf("%d ",b[i]);
}
printf("\n");
for(int i=0;i<l;i++)
{
printf("%d ",c[i]);
}
return 0;
}
根据你给的信息,代码大致就是这样;可能有些瑕疵,你再根据原题修改一下;希望能帮到你,望采纳;