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)
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