2024-01-10 13:37来源:m.sf1369.com作者:宇宇
c语言中用CODE修饰就是把大数组存于程序存储中,运行中不能修改,相当于常量
完整的程序,用链表:
//---------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
typedef struct node{
int id;
double score;
struct node *next;
} node,list;
void init(list **a,list **b) /*创建两个原链表*/
{
double score[]={70,85,75,90,60,80,76,50};
list *now,*ne;
int i=0;
*b=*a=NULL;
for (i = 0; i<8; i++) {
ne=(list *)malloc(sizeof(node));
ne->id=i+1;
ne->score=score[i];
ne->next=NULL;
if (i<4) {
if (!*a) *a=now=ne;
else{
now->next=ne;
now=ne;
}
}
else{
if (!*b) *b=now=ne;
else{
now->next=ne;
now=ne;
}
}
}
}
void sort(list *a)
/*链表按成绩升序排序*/
{
list *t,*k;
int tid;
double tsc;
while (a->next)
{
k=a;
for (t=a->next; t; t=t->next) {
if (t->score<k->score) {
k=t;
}
}
if (k!=a) {
tid=a->id;
a->id=k->id;
k->id=tid;
tsc=a->score;
a->score=k->score;
k->score=tsc;
}
a=a->next;
}
}
list *merge(list *a,list *b) /*合并两个链表a和b,并返回合并后的新链表*/
{
list *rt=NULL,*n=NULL,*now=NULL;
while (a&&b)
{
n=(list *)malloc(sizeof(node));
n->next=NULL;
if (a->score<=b->score) {
n->id=a->id;
n->score=a->score;
a=a->next;
}
else {
n->id=b->id;
n->score=b->score;
b=b->next ;
}
if (!rt) {
rt=now=n;
}
else{
now->next=n;
now=n;
}
}
while (a)
{
n=(list *)malloc(sizeof(node));
n->next=NULL;
n->id=a->id;
n->score=a->score;
now->next=n;
now=n;
a=a->next
;
}
while (b)
{
n=(list *)malloc(sizeof(node));
n->next=NULL;
n->id=b->id;
n->score=b->score;
now->next=n;
now=n;
b=b->next;
}
return rt;
}
void view(list *a)
/*输出链表的内容*/
{
if (a) {
printf(%d:%g\
,a->id,a->score); /*按 学号:成绩 的格式输出*/
view(a->next);
}
}
void Free(list *a)
/*释放空间,删除链表*/
{
if (a->next) Free(a->next);
free(a);
}
int main(void)
/*测试*/
{
list *a,*b,*c;
init(&a,&b);
sort(a);
sort(b);
c=merge(a,b);
view(c);
/*输出合并后的链表*/
Free(a);
Free(b);
Free(c);
return 0;
}
//---------------------------------------------------------------------------