#include <cstdio>
#include <stdlib.h>
typedef struct Node
{
int data;
struct Node * next;
} Node,* Linklist; //定义链表的结点,链表头
void Initlist (Linklist *CL) //初始化链表
{
*CL=(Linklist)malloc(sizeof(Node));
(*CL)->next=*CL; //初始化循环单链表的关键
}
void CreateFromTail(Linklist CL) //尾插发建表
{
Node *r,*s;
r=CL; //r总是指向链表的最后结点,s是新的结点
int flag=1; int num;
while(flag)
{
scanf("%d",&num);
if(num!= -1)
{
s=(Node *) malloc(sizeof(Node));
s->data=num;
r->next=s;
r=s;
}
else{
flag=0;
r->next=CL;
}
}
return ;
}
void Output(Linklist CL) //输出循环单链表
{
Node *temp;
temp=CL->next;
while(temp != CL)
{
printf("%d ",temp->data);
temp=temp->next;
}
printf("\n");
}
Linklist Unionlist(Linklist LA ,Linklist LB) //循环单链表的合并
{
Node *p,*q; //用指针结点p,q表示LA LB的表尾指针
p=LA;
q=LB;
while(p->next != LA) p=p->next;
while(q->next != LB) q=q->next;
q->next=LA;
p->next=LB->next;
free(LB);
return (LA);
}
int main()
{
Linklist CL,CL1,CL2,CL3;
Initlist(&CL);
printf("输入循环单链表的值 以-1为结束标志\n");
CreateFromTail(CL);
Output(CL);
printf("输入要合并的两个单链表的值 以-1为结束标志\n");
Initlist(&CL1);
Initlist(&CL2);
CreateFromTail(CL1);
CreateFromTail(CL2);
CL3=Unionlist(CL1,CL2);
printf("合并成的循环单链表为\n");
Output(CL3);
return 0;
}
数据结构 链表 循环单链表的建立 C语言版
最新推荐文章于 2024-04-27 18:39:36 发布