#include<cstdio>//stdio.h效果一样
#include<stdbool.h>
#include<malloc.h>
#include<stdlib.h>
typedef char Elemtype;
typedef struct Node {
Elemtype data;
struct Node *next;
}Node, *TailLinkList;
//初始化带头结点、尾指针的循环单链表
void InitTailLinkList(TailLinkList *L)
{
*L = (TailLinkList)malloc(sizeof(Node));
if (!(*L)) {
printf("Cannot allocate memory");
exit(1);//需要cstdlib或者stdlib.h
}
(*L)->next = *L;
}
//创建
void CreateTailLinkList(TailLinkList *L)
{
Node *tail = (*L), *s;
printf("Tail LinkList Creating:\n");
char ch = getchar();
while (ch != '$') {
s = (Node*)malloc(sizeof(Node));
if (!s) {
printf("Cannot allocate ");
exit(1);
}
s->data = ch;
tail->next = s;
s->next = *L;
tail = s;
ch = getchar();
}
*L = tail;
}
//链接
TailLinkList MergeTailLinkList(TailLinkList LA, TailLinkList LB)
{
Node *temp1, *temp2;
temp1 = LA->next;
temp2 = LB->next;
LA->next = LB->next->next;
free(temp2);
LB->next = temp1;
return LB;
}
//展示内容
void DisplayTailLinkList(TailLinkList L)
{
Node *p = L->next->next;
printf("The list is:\n");
while (p != L->next) {
printf("%c", p->data);
p = p->next;
}
printf("\n");
}
int main()
{
TailLinkList tl1, tl2;
InitTailLinkList(&tl1);
InitTailLinkList(&tl2);
CreateTailLinkList(&tl1);
getchar();//吸收掉回车换行
CreateTailLinkList(&tl2);
DisplayTailLinkList(tl1);
DisplayTailLinkList(tl2);
TailLinkList tl3 = MergeTailLinkList(tl1, tl2);
printf("The Merge List is : \n");
DisplayTailLinkList(tl3);
}
尾指针循环单链表
最新推荐文章于 2023-08-06 18:43:40 发布