首页 » Program » C/C++ » 正文

Circular links

循环链表是使最后一个结点的next指针指向表头结点,构成循环,这里我只实现了循环链表的创建和打印操作。

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

    typedef struct lnode
    {
        int data;
        struct lnode *next;
    } LNODE,*linklist;

    //打印链表元素
    void print_list(linklist L)
    {
        linklist p;
        printf("建立的循环链表为:\n");
        p = L->next;      //指向结点(非头结点)
        while (p!=L)
            {
                printf("%d ",p->data);
                p=p->next;
            }
        printf("\n");
    }

    //创建循环链表
    void creat_list(linklist L)
    {
        linklist p,q;
        L->next = L;     //指向自己
        printf("请输入链表元素:\n");
        q = (linklist)malloc(sizeof(LNODE));
        scanf("%d",&(q->data));
        q->next = L->next;      //q的后指针指向头结点
        L->next = q;            //头结点的后指针指向新开的q
        p = (linklist)malloc(sizeof(LNODE));
        while ((scanf("%d",&(p->data)))!=EOF)
            {
                p->next = q->next;            //新开的p的后指针指向前一个q的后指针
                q->next = p;                  //q的后指针指向新开的p
                q = p;                        //q记录
                p=(linklist)malloc(sizeof(LNODE));    //p再新开
            }
    }

    int main()
    {
        linklist L;       //是地址
        L = (linklist)malloc(sizeof(LNODE));
        creat_list(L);
        print_list(L);
        return 0;
    }

赞 (0)

Comment