数据结构 链表 循环单链表的建立 C语言版

来源:互联网 发布:centos 7如何安装rpm包 编辑:程序博客网 时间:2024/05/21 22:41
#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;}