#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 mix_connect(LinkList A, LinkList B)
{//A,B均为带头结点的单链表,长度均未显式存储
if(A->next == NULL && B->next == NULL)
return NULL;
else
{
LinkList p = A->next;
LinkList q = B->next;
LinkList C = A; C->next = NULL;
LinkList s = C; //s为工作指针,指向C的最后一个结点
free(B);
while(p != NULL && q != NULL)
{
s->next = p;
p = p->next;
s = s->next;
s->next = q;
q = q->next;
s = s->next;
}
if(p != NULL)
s->next = p;
if(q != NULL)
s->next = q; //这两个if只会执行其中一个
return C;
}
}
int main()
{
LinkList A = creat();
LinkList B = creat();
LinkList C=mix_connect(A, B);
print(C);
return 0;
}
2.23√ 设线性表A=(a1,a2,...,am), B=(b1,b2,...,bn),试写一个按下列规则合并AB为线性表C的算法
最新推荐文章于 2022-07-13 14:54:37 发布