数据结构循环链表.C

循环链表.C

如果在你懂了的单链表的前提下对于循环链不难理解,就把单链表的首位单向的连接起来(尾节点指向第一个节点),而难得是在于如何实现?循环链表的插入节点如何实现?这里采取单链表的的头插法,基本的理解并没有在单链表的基础上延伸很多,可以根据下面的代码自行理解。如果有困难或者有疑问的话可以写在评论区大家一起讨论!

  1. 上代码:
#include <time.h>
#include <stdio.h>
#include <string.h>

#define ERROR 0;
#define OK 1;

typedef int ElemType;
typedef int Status;

typedef struct Node
{
    ElemType data;
    struct Node* next;

}Node;

typedef struct Node* RLinkList;

void InitRLinkList(RLinkList *RL)
/*初始化链表头节点*/
{
    *RL = (RLinkList)malloc(sizeof(Node));
    if(!(*RL)) 
    {
        return ERROR;
    }
    (*RL) -> next = NULL;
    return OK;
}

void CreateRLinkList(RLinkList *RL, int n)
/*创建随机循环链表*/
{
    RLinkList p,q;
    int i;
    srand(time(0));
    p = *RL;
    for( i=0; i<n; i++)
    {
        q = (RLinkList)malloc(sizeof(Node));
        q -> data = rand()%100 + 1;
        q -> next = p -> next;
        p -> next = q;
        p = q;
    }
    p -> next = (*RL) -> next;
    return OK;
}

Status GetReList(RLinkList *RL)
{
    RLinkList p;
    int m;
    p = (*RL) -> next;
    do
    {
        m = p ->data;
        printf("%d\t", m);
        p = p ->next;
    } while (p != (*RL) -> next); 
}

int main()
{
    RLinkList RL;
    int n,c;
    char j;

    InitRLinkList(&RL);
    printf("请输入你有要创建几位元素的链表?\n");
    scanf("%d", &n);
    CreateRLinkList(&RL, n);
    printf("您要获得链表元素吗?请输入(Y/N)!\n");
    while((c = getchar()) != '\n' && c != EOF);
    scanf("%c",&j);
    if(j == 'Y')
    {
        GetReList(&RL);
        printf("\n");
    }
    return 0;
}

2.源代码:
Github:xaiosi

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值