C语言编写 数据结构
发布网友
发布时间:2022-04-23 18:19
我来回答
共1个回答
热心网友
时间:2023-10-12 16:50
#include <stdio.h>
#include <stdlib.h>
typedef struct intnumber
{
int n;
struct intnumber *next;
}INTNUM;
INTNUM *creat(int num)/*建立链表*/
{
INTNUM *p1,*p2,*head;
int i;
p1 = (INTNUM *)malloc(sizeof(INTNUM));
head = p1;
p2 = p1;
for(i = 0;i < num - 1;i++)
{
p1 = (INTNUM *)malloc(sizeof(INTNUM));
p2 ->next = p1;
p2 = p1;
}
p1 ->next = NULL;
return head;
}
void input(INTNUM *head)/*输入链表数据*/
{
INTNUM *p;
p = head;
while(p ->next != NULL)
{
scanf("%d",&(p ->n));
p = p ->next;
}
scanf("%d",&(p ->n));
}
void output(INTNUM *head)/*输出链表数据*/
{
INTNUM *p;
p = head;
while(p ->next != NULL)
{
printf("%d/t",p ->n);
p = p ->next;
}
printf("%d/n",p ->n);
}
void main(void)
{
INTNUM *pa,*pb,*pc,*heada,*headb,*headc;/*pc是指向新链表的指针*/
int counta,countb;/*counta,countb是建立链表的结点数*/
printf("请输入建立A链表的结点数:");
scanf("%d",&counta);
pa = creat(counta);
heada = pa;
printf("请按递增输入A链表结点上的数据:");
input(heada);
printf("打印A链表结点上的数据:/n");
output(heada);
printf("请输入建立B链表的结点数:");
scanf("%d",&countb);
pb = creat(countb);
headb = pb;
printf("请按递增输入B链表结点上的数据:");
input(headb);
printf("打印B链表结点上的数据:/n");
output(headb);
printf("将链表A和链表B仍然按照递增关系合并成一个新的链表C:");
headc = heada;
pc = pa;
pa = pa ->next;
while(pa && pb)
{
if(pa ->n <= pb ->n)
{
pc ->next = pa;
pc = pc ->next;
pa = pa ->next;
}
else
{
pc ->next = pb;
pc = pc ->next;
pb = pb ->next;
}
}
pc ->next = pa ? pa : pb;
printf("打印合并后链表结点上的数据:/n");
output(headc);
}
结果如下:
请输入建立A链表的结点数:3
请按递增输入A链表结点上的数据:1 20 30
打印A链表结点上的数据:
1 20 30
请输入建立B链表的结点数:5
请按递增输入B链表结点上的数据:2 18 22 26 32
打印B链表结点上的数据:
2 18 22 26 32
将链表A和链表B仍然按照递增关系合并成一个新的链表C:打印合并后链表结点上的数据:
1 2 18 20 22 26 30 32