结构体数组实现链表,无malloc

用数组形式的链表结构

quene.c

#pragma GCC optimize 0
#include "sys.h"

#define MAXNUM 10
#define ADD 0
#define DELETE 1
#define CHANGE 2
#define FIND 3

struct double_linklist link_listArray[MAXNUM];
int count;
void _quene()
{
    struct double_linklist *head;
    head = _init_linklist(link_listArray);
    //增加调用
    for (int i = 0; i < 3; i++)
    {
        head = _add_linklist(head, 555 + i, 1);
    }
    //改变调用
    head = _change_linklist(head, 557, 999);
    //增加调用
    for (int i = 0; i < 1; i++)
    {
        head = _add_linklist(head, 666 + i, 4);
    }
    //删除调用
    for (int i = 0; i < 1; i++)
    {
        head = _delete_linklist(head, 1);
    }
    //初始化
    head = _init_linklist(head);
}
//初始化
struct double_linklist *_init_linklist(struct double_linklist *head)
{
    head->next = head->prev = head;
    return head;
}
//增加链表
struct double_linklist *_add_linklist(struct double_linklist *listp, int addNum, int position)
{
    if (!_is_malloc(link_listArray) && position - 1 > count) //如果1、空间已满 2、插入位置大于数据个数 直接返回
        return listp;

    struct double_linklist *temp;
    temp = _is_malloc(link_listArray);
    temp->isNULL = 1;
    temp->data = addNum;

    if (count == 0)
    {
        temp->next = temp->prev = temp;
        count++;
        return temp;
    }
    for (int i = 0; i < position - 1; i++)
        listp = listp->next;

    listp->prev->next = temp;
    temp->prev = listp->prev;
    listp->prev = temp;
    temp->next = listp;

    count++;
    if (position == 1) //返回表头
        return temp;
    return listp;
}
//删除链表
struct double_linklist *_delete_linklist(struct double_linklist *listp, int position)
{
    if (!listp->isNULL) //如果表头无数据,直接返回
        return listp;
    struct double_linklist *temp = listp;
    for (int i = 0; i < position - 1; i++)
        temp = temp->next;
    temp->prev->next = temp->next;
    temp->next->prev = temp->prev;
    temp->isNULL = 0;
    temp->data = 0;
    if (position == 1)
        return temp->next;
    return listp;
}
//改变链表数据
struct double_linklist *_change_linklist(struct double_linklist *listp, int oldNum, int newNum)
{
    struct double_linklist *temp = listp;
    for (int i = 0; i < MAXNUM; i++)
    {
        if (temp->data == oldNum)
        {
            temp->data = newNum;
            return listp;
        }
        temp = temp->next;
    }
    return listp;
}
//查找数据
void _find_linklist(struct double_linklist *listp, int findNum)
{
    struct double_linklist *temp = listp;
    for (int i = 0; i < MAXNUM; i++)
    {
        if (temp->data == findNum)
        {
            return listp;
        }
        temp = temp->next;
    }
    return listp;
}
//寻址
struct double_linklist *_is_malloc(struct double_linklist *head)
{
    for (int i = 0; i < MAXNUM; i++)
    {
        if (head[i].isNULL == 0)
            return &head[i];
    }
    return 0;
}

sys.c

#pragma GCC optimize 0
#include "main.h"
void setup(void)
{
}

int i = 0;
void loop()
{
  i++;
  _quene();
}

sys.h

#ifndef _SYS_H
#define _SYS_H
void setup(void);
void loop();

struct double_linklist
{
    int data;
    int isNULL;
    struct double_linklist *next;
    struct double_linklist *prev;
};

struct double_linklist *_init_linklist(struct double_linklist *listp); //初始化
struct double_linklist *_add_linklist(struct double_linklist *listp, int addNum, int position);
struct double_linklist *_delete_linklist(struct double_linklist *listp, int position);
struct double_linklist *_change_linklist(struct double_linklist *listp, int oldNum, int newNum);
void _find_linklist(struct double_linklist *listp, int findNum);
struct double_linklist *_is_malloc(struct double_linklist *head); //寻址

#endif
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值