链表

链表

格式

链表最基本的格式如下:

struct Node
{
    int data;              //数据区
    struct Node *next;     //地址区
};

链表空间分为数据区和地址区,数据区用来存储数据,地址区存储的是下一块数据的地址;

链表的基本操作:

  1. 初始化
/*
函数功能:初始化链表表头
函数参数:表头地址
函数返回值:SUCCESS FAILURE
*/
int InitLink(pnode *h)  //由于需要修改实参指针内容,所以函数参数需要双重指针
{
    if (h == NULL)
    {
        printf("初始化失败\n");
    }

    *h = (node *)malloc(sizeof(node) * 1);
    if (NULL == *h)
    {
        return FAILURE;
    }

    (*h)->next = NULL;

    return SUCCESS;
}
  1. 插值
/*
函数功能:向链表插值
函数参数:表头 插入位置 查入元素
函数返回值:FAILURE SUCCESS
*/
int InsertLink(pnode h, int p, int e)   //向链表插入数值,如果要插入的位置前面不存在,就插入失败
{
    if (NULL == h)
    {
        return FAILURE;
    }

    pnode n = h;
    int k = 1;
    while(k < p && n)
    {
        n = n->next;
        k++;
    }

    if (!n || p < k)
    {
        return FAILURE;
    }

    pnode m = (pnode)malloc(sizeof(node) * 1);
    if (NULL == m)
    {
        return FAILURE;
    }

    m->data = e;
    m->next = n->next;
    n->next = m;

    return SUCCESS;
}
  1. 确认链表是否为空
/*
函数功能:确认链表是否为空
函数参数:表头
函数返回值:FAILURE SUCCESS
*/
int LinkEmpty(pnode h)
{
    if (NULL == h)
    {
        return FAILURE;
    }

    return (h->next == NULL) ? TURE : FALSE;
}
  1. 输出链表
/*
函数功能:输出链表
函数参数:表头
函数返回值:SUCCESS FAILURE
*/
int TraverseLink(pnode h)
{
    if (NULL == h)
    {
        return FAILURE;
    }

    pnode n = h->next;
    while(n)
    {
        printf("%d ", n->data);
        n = n->next;
    }

    printf("\n");

    return SUCCESS;
}
  1. 定位元素
/*
函数功能:定位元素
函数参数:表头 元素 元素位置
函数返回值:SUCCESS FAILURE
*/
int LocateElem(pnode h, int e, int *p)
{
    if(NULL == h)
    {
        return FAILURE;
    }

    h = h->next;
    while(h)
    {   
        if (h->data == e)
        {
            return SUCCESS;
        }
        else
        {
            h = h->next;
            (*p)++;
        }
    }

    return FALSE;
}
  1. 或取元素位置
/*
函数功能:获取元素位置
函数参数:表头 元素位置
函数返回值:FAILURE SUCCESS 元素
*/
int GetElem(pnode h, int p)
{
    if (NULL == h)
    {
        return FAILURE;
    }

    pnode n = h->next;
    int i;
    for (i = 0; i < p; i++)
    {
        n = n->next;
        if (NULL == n)
        {
            return FALSE;
        }
    }

    return n->data;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值