代码改变世界

循环单链表的创建

2013-06-08 14:19  Keiven_LY  阅读(1524)  评论(0)    收藏  举报

说明:

  循环链表(Circular Linked List,CL)是单链表的一种形式,它是首尾相连的链表,其特点就是将单链表的最后一个节点的指针域由NULL改为指向头节点,就得到了单链形式的循环链表。

源码:

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>

typedef int elementtype;   /* 自定义类型  这里将elementtype定义为int类型 */

typedef struct CNode 
{
    elementtype data;
    struct CNode *next;
    
}CNode;


CNode *crt_linklist()  /* 创建尾指针表示的循环链表 */
{
    CNode *rear;   /* 定义尾指针 */
    int a;     /* 链表节点数据元素 */
    CNode *p;
    rear=(CNode*)malloc(sizeof(CNode));   /* 为为指针节点分配内存空间 */

    rear->data=-1;    /* 区分节点为尾指针节点的标志 */
    rear->next =rear;
    printf("请输入循环链表的元素(以-1结束):\n");
    scanf_s("%d",&a);

    while(a!=-1)
    {
        p=(CNode*)malloc(sizeof(CNode));
        p->data=a;
        p->next=rear->next;
        rear->next=p;
        scanf_s("%d",&a);
    }
    p=rear;
    while(p->next!=rear)
    {
        p=p->next;
    }
    return p;

}

void print(CNode *cl)
{
    CNode *p;
    p=cl->next->next;
    while(p!=cl->next)
    {
        printf("%d ",p->data);
        p=p->next;
    }
    printf("\n");
}


main()
{

    CNode *clist;
    printf("建立循环链表,请输入数据!\n");
    clist=crt_linklist();
    printf("建立的循环链表为:\n");
    print(clist);
    system("pause");
}

结果: