#include <stdio.h>
#include <stdlib.h>
#include"time.h"
#define ElemType char
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef struct Node/* 定义节点类型*/
{
ElemType data; //数据
struct Node *next;//地址
}Node,*LinkList;
InitCLinkList(LinkList *CL)
{
*CL=(LinkList)malloc(sizeof(Node)); /*二级指针 *CL相当于存储的是地址*/
(*CL)->next=*CL; /*头节点指向自身*/
}
void CreatCLinkList(LinkList CL)
{
Node *rear,*s;
char c;
int i=0;
rear=CL; /*rear一直指向新节点*/
for(i=0;i<=5;i++)
{
s=(Node *)malloc(sizeof(Node)); //新节点
s->data=(rand() % (90-65+1))+ 65; //新节点存储数据
rear->next=s; //头节点指向新节点
rear=s; //下一个需要处理的节点
}
rear->next=CL;
}
void printf_linkList(LinkList CL)
{
Node *N;
int i=1;
N=CL;
N=N->next;
while(CL!=(N->next))
{
printf("第%d个节点内容为%c\n",i,N->data);
N=N->next;
i++;
}
}
LinkList Merge_1(LinkList LA,LinkList LB)
{
Node *p,*q;
p=LA;
q=LB;
while(p->next != LA)
{
p=p->next;
}
while(q->next != LB)
{
q=q->next;
}
q->next=LA;//q尾巴连接 LA头
p->next=LB->next;
free(LB);
return LA;
}
int main()
{
LinkList CL0,CL1,CL2;
srand((unsigned int)(time(NULL)));
InitCLinkList(&CL0);
InitCLinkList(&CL1);
InitCLinkList(&CL2);
printf("CL0生成中:\n");
CreatCLinkList(CL0);
printf_linkList(CL0);
printf("CL1生成中:\n");
CreatCLinkList(CL1);
printf_linkList(CL1);
printf("合成链表:\n");
CL2=Merge_1(CL0,CL1);
printf_linkList(CL2);
return 0;
}
循环单链表合并算法
最新推荐文章于 2022-10-30 19:59:41 发布