循环链表的简单应用

来源:互联网 发布:ios wkwebview js弹窗 编辑:程序博客网 时间:2024/05/21 06:21
#include <stdio.h>  #include <stdlib.h>  #include <malloc.h>  typedef int DataType;typedef struct Node{DataType data;struct Node* next;}ListNode, *LinkList;LinkList CreateCycList(int n);//创建循环单链表  void DisplayCycList(LinkList head);//显示输出循环单链表LinkList Link(LinkList head1, LinkList head2);//连接两个单链表void main( ){LinkList h1, h2;int n;printf("创建一个单链表h1:\n");printf("请输入元素个数:");scanf("%d", &n);h1 = CreateCycList(n);printf("创建一个单链表h2:\n");printf("请输入元素个数:");scanf("%d", &n);h2 = CreateCycList(n);printf("输出循环单链表h1:\n");DisplayCycList(h1);printf("输出循环单链表h2:\n");DisplayCycList(h2);h1 = Link(h1, h2);printf("输出连接后的循环单链表h1+h2:\n");DisplayCycList(h1);}LinkList CreateCycList(int n){DataType e;LinkList head = NULL;ListNode *p, *q;int i = 1;q = NULL;while (i <= n){printf("请输入第%d个元素:", i);scanf("%d", &e);if (i == 1)      //创建第一个结点{head = (LinkList)malloc(sizeof(ListNode));head->data = e;head->next = NULL;q = head;//第一个结点q始终指向最后一个结点  }else{p = (LinkList)malloc(sizeof(ListNode));p->data = e;p->next = NULL;q->next = p;//将新结点连接到链表中q = p;//q始终指向最后一个结点  }i++;}if (q != NULL){q->next = head;//将最后一个结点的指针指向头结点指针,形成循环链表  }return head;}void DisplayCycList(LinkList head){ListNode *p;p = head;if (p == NULL){printf("该链表是空表");return;}while (p->next != head)    //如果不是最后一个结点,输出该结点{printf("%4d", p->data);p = p->next;}printf("%4d\n", p->data);     //输出最后一个结点}LinkList Link(LinkList head1, LinkList head2){ListNode *p, *q;p = head1;while (p->next != head1)  //指针p指向链表的最后一个结点{p = p->next;}q = head2;while (q->next != head2)   //指针q指向链表的最后一个结点{q = q->next;}p->next = head2;     //将第一个链表的尾端连接到第二个链表的第一个结点q->next = head1; //将第二个链表的尾端连接到第一个链表的第一个结点return head1;}

1
0 0
原创粉丝点击