/*
使用随机数,打出2组数字,将这2组数字由小到大进行排列。
16 18 34 46 51 53 58 70
0 8 32 37 52 82 84 90
0 8 16 18 32 34 37 46 51 52 53 58 70 82 84 90
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 8
typedef struct node *link;
struct node {
int item;
link next;
};
link NODE(int item, link next)
{
link t = malloc(sizeof *t);
t->item = item;
t->next = next;
return t;
}
void show_list(link head)
{
link t;
for (t=head->next; t; t=t->next) printf("%3d", t->item);
printf("\n");
}
void insert_node(link head, int item)
{
link x, y;
for (y=head, x=y; y; x=y, y=y->next)
if (item <= y->item) break;
x->next = NODE(item, y);
}
void delete_node(link head, int item)
{
link x, y;
for (y=head, x=y; y; x=y, y=y->next)
if (item == y->item) break;
if (y==NULL) return;
x->next = y->next;
free(y);
}
link merge(link h1, link h2)
{
link h = NODE(-1, NULL);
link t1 = h1->next;
link t2 = h2->next;
link t = h;
while (t1 && t2)
if (t1->item < t2->item) {
t->next=t1; t=t->next; t1=t1->next;
} else {
t->next=t2; t=t->next; t2=t2->next;
}
if (t1) t->next = t1;
if (t2) t->next = t2;
h1->next = NULL;
h2->next = NULL;
return h;
}
int main()
{
int i;
link h1 = NODE(-1, NULL);
link h2 = NODE(-1, NULL);
srand(time(NULL));
for (i=0; i<N; i++)
insert_node(h1, rand()%100);
for (i=0; i<N; i++)
insert_node(h2, rand()%100);
show_list(h1);
show_list(h2);
link h = merge(h1, h2);
show_list(h);
return 0;
}
C语言——单链表排序练习题
最新推荐文章于 2022-04-19 16:28:01 发布