#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef struct {
double a;
int b;
}ElemType;
typedef struct Lnode {
ElemType elem;
struct Lnode* next;
}Lnode, *LinkList;
void visit(ElemType e);
void CreateList_R(LinkList& R, int n); //创建带尾指针的循环链表
void ListTraverse(LinkList R); //遍历带尾指针循环聊表
void ListConnect(LinkList Ta, LinkList& Tb); //带尾指针循环链表的合并
int main()
{
LinkList Ta = NULL;
int a = 0;
scanf("%d", &a);
CreateList_R(Ta, a);
ListTraverse(Ta);
printf("--------------------------------------------\n\n");
LinkList Tb = NULL;
int b = 0;
scanf("%d", &b);
CreateList_R(Tb, b);
ListTraverse(Tb);
printf("--------------------------------------------\n\n");
ListConnect(Ta, Tb);
ListTraverse(Tb);
return 0;
}
void CreateList_R(LinkList& R, int n)
{
R = (LinkList)malloc(sizeof(Lnode));
R->next = NULL;
Lnode* q = R;
for (int i = 0; i < n; i++)
{
Lnode* p = (Lnode*)malloc(sizeof(Lnode));
ElemType elem;
scanf("%lf%d", &elem.a, &elem.b);
p->elem.a = elem.a;
p->elem.b = elem.b;
p->next = NULL;
R->next = p;
R = p;
}
R->next = q;
}
void visit(ElemType e)
{
printf("%lf %d\n", e.a, e.b);
}
void ListTraverse(LinkList R)
{
Lnode* p = R->next->next;
while (p != R->next)
{
visit(p->elem);
p = p->next;
}
}
void ListConnect(LinkList Ta, LinkList& Tb)
{
Lnode* p = Ta->next;
Ta->next = Tb->next->next;
free(Tb->next);
Tb->next = p;
}
带尾指针的循环链表
于 2022-07-09 22:53:24 首次发布