实现循环单链表各种基本运算的算法

/**
*   实现循环单链表各种基本运算的算法
*
*/

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

typedef int ElemType;
typedef struct LNode
{
    ElemType data;//数据域
    struct LNode *next;//指针域

}LinkNode;// 声明循环单链表结点类型

/*---------------------头插法建立循环单链表------------------------*/
static void create_list_front(LinkNode *&L, ElemType a[], int n)
{
    int i;
    LinkNode *s;

    // 创建头结点
    L = (LinkNode *)malloc(sizeof(LinkNode));
    L->next = NULL;
    for(i = 0; i < n; i++)
    {
        // 创建新结点
        s = (LinkNode *)malloc(sizeof(LinkNode)); // 分配内存
        s->data = a[i];
        // 将结点s插入到原开始结点之前,头结点之后
        s->next = L->next;
        L->next = s;
    }
    s = L->next;
    while(s->next != NULL)//查找尾结点,由s指向它
        s = s->next;
    //尾结点next域指向头结点
    s->next = L;
}

/*---------------------尾插法建立循环单链表------------------------*/
static void create_list_rear(LinkNode *&L, ElemType a[], int n)
{
    int i;
    LinkNode *s, *r;

    // 创建头结点
    L = (LinkNode *)malloc(sizeof(LinkNode));// 分配内存
    L->next = NULL;
    // r始终指向终端结点,开始时指向头结点
    r = L;
    for(i = 0; i < n; i++)
    {
        // 创建新结点
        s = (LinkNode *)malloc(sizeof(LinkNode));
        s->data = a[i];
        // 将结点s插入到结点r之后
        r->next = s;
        r = s;
    }
    // 尾结点next域指向头结点
    r->next = L;
}

/*---------------------初始化线性表------------------------*/
static void init_list(LinkNode *&L)//指针的引用
{
    L = (Lin

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值