#include<stdio.h>
#include<malloc.h>
#include <stdlib.h>
#define error -1;
#define OK 1;
typedef int ElemType;
typedef int status;
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode, *LinkList;
LinkList creat()
{//使用尾插法建立带头结点的单链表;
LinkList L;
L = (LinkList)malloc(sizeof(LNode)); //开辟头结点空间
if(!L) printf("memory malloc error!\n");
LinkList p = L;
ElemType a;
int len;
printf("请输入待建表的表长:");
scanf("%d", &len);
if(len>0)
{
for(int i=0; i<len; i++)
{
printf("请输入第%d个元素的值:", i+1);
scanf("%d", &a);
p->next = (LinkList)malloc(sizeof(LNode));
p->next->data = a;
p = p->next;
}
}
p->next = NULL;
return L;
}
void print(LinkList L)
{
LinkList p = L ->next;
while(p != NULL)
{
printf("%d\n", p->data);
p = p->next;
}
}
LinkList connect(LinkList A, LinkList B)
{//将两个递增有序的单链表AB归并成一个递减有序的单链表C,用头插法
if(A->next == NULL && B->next == NULL)
return NULL;
else
{
LinkList p = A->next;
LinkList q = B->next;
LinkList C = A; C->next = NULL;
free(B);
LinkList s; //用于暂时保存p或q的后继结点;
while(p != NULL && q != NULL)
{
if(p->data <= q->data)
{
s = p->next;
p->next = C->next;
C->next = p;
p = s;
}
else
{
s = q->next;
q->next = C->next;
C->next = q;
q = s;
}
}
while(p != NULL)
{
s = p->next;
p->next = C->next;
C->next = p;
p = s;
}
while(q != NULL)
{
s = q->next;
q->next = C->next;
C->next = q;
q = s;
}
return C;
}
}
int main()
{
LinkList A = creat();
LinkList B = creat();
LinkList C=connect(A, B);
print(C);
return 0;
}
2.24√ 将A表和B表归并成一个按元素值递减有序排列的线性表C
最新推荐文章于 2021-11-30 19:01:09 发布