11.11

7-1 线性表A,B顺序存储合并
分数 20
作者 liudan
单位 石家庄铁道大学
有两张非递增有序的线性表A,B,采用顺序存储结构,两张表合并用c表存,要求C为非递减有序的,然后删除C表中值相同的多余元素。元素类型为整型

输入格式:
第一行输入输入表A的各个元素,以-1结束,中间用空格分隔;第二行输入表B的各个元素,以-1结束,中间用空格分隔。

输出格式:
输出结果为表C的非递减有序序列,中间用英文逗号分隔

输入样例:
在这里给出一组输入。例如:

9 8 7 -1
10 9 8 4 3 -1
输出样例:
在这里给出相应的输出。例如:

3,4,7,8,9,10
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
栈限制
8192 KB

include <stdio.h>

include <stdlib.h>

include <string.h>

typedef struct fff {
int data;
struct fff *next;
} node, *Node;
void build(Node p) {
int x;
while (scanf("%d", &x) == 1 && x != -1) {
node *now = (node *)malloc(sizeof(node));
if (now == NULL) {
printf("Memory allocation failed!\n");
exit(1);
}
now->data = x;
now->next = p->next;
p->next = now;
}
}
void merge(Node p1, Node p2, Node pre) {
p1 = p1->next;
p2 = p2->next;
while (p1 != NULL && p2 != NULL) {
if (p1->data <= p2->data) {
node *now = (node *)malloc(sizeof(node));
now->data = p1->data;
now->next = pre->next;
pre->next = now;
pre = pre->next;
p1 = p1->next;
} else {
node *now = (node *)malloc(sizeof(node));
now->data = p2->data;
now->next = pre->next;
pre->next = now;
pre = pre->next;
p2 = p2->next;
}
}
while (p1 != NULL) {
node *now = (node *)malloc(sizeof(node));
now->data = p1->data;
now->next = pre->next;
pre->next = now;
pre = pre->next;
p1 = p1->next;
}
while (p2 != NULL) {
node *now = (node *)malloc(sizeof(node));
now->data = p2->data;
now->next = pre->next;
pre->next = now;
pre = pre->next;
p2 = p2->next;
}
}
void flush(Node p) {
if (p != NULL) p = p->next;
Node pre = p;
if (p != NULL) p = p->next;
while (p != NULL) {
if (p->data == pre->data) {
pre->next = p->next;
free(p);
p = pre->next;
} else {
pre = p;
p = p->next;
}
}
}
void show(Node p) {
p = p->next;
int first = 1;
while (p != NULL) {
if (!first) {
printf(",");
}
printf("%d", p->data);
first = 0;
p = p->next;
}
printf("\n");
}
void freeList(Node p) {
Node temp;
while (p != NULL) {
temp = p;
p = p->next;
free(temp);
}
}

int main() {
Node p1 = (node *)malloc(sizeof(node));
p1->next = NULL;
build(p1);
Node p2 = (node *)malloc(sizeof(node));
p2->next = NULL;
build(p2);
Node p3 = (node *)malloc(sizeof(node));
p3->next = NULL;
merge(p1, p2, p3);
flush(p3);
show(p3);
freeList(p1);
freeList(p2);
freeList(p3);
return 0;
}

posted @ 2025-11-23 12:39  muyuxiaxing  阅读(4)  评论(0)    收藏  举报