循环链表(c)

/*
malloc(m): 开辟m字节长度的地址空间,并返回空间的首地址
sizeof(x): 计算变量x的的长度
free(p): 释放指针p所指变量的存储空间,即彻底删除一个变量
*/
// 存储结构
typedef struct DuLNode
{
ElemType data; // 数据域 (ElemType为你所要存储的数据的类型,可以是基本类型,也可以是自己定义的结构体类型)
struct DuLNode *prior; // 指向直接前驱
struct DuLNode next; // 指向直接后驱
}DuLNode,
DuLinkList;
// 双向链表初始化
Status InitDuLinkList(DuLinkList &L) // Status(状态)由自己去定义,例如用0,1表示表示出问题(ERROR)和成功(OK)
{
L = (DulLNode)malloc(sizeof(DuLNode)); // 开辟DuLNode所需要字节长度的地址空间,作为链表的首地址
if(!L)
return ERROR; // 没有开辟空间说明出问题了,返回状态为ERROR
L->prior = null;
L->next = null;
return OK; // 开辟成功返回状态为OK
}
循环链表(c)
// 双向链表的插入,在第i个位置之前插入数据e
Status ListInsert_DuL(DuLinkList &L,int i,ElemType e)
{
DuLNode p = (DuLNode)malloc(sizeof(DuLNode));
if(!(p = !(GetElem(L,i)))) // 如果该位置为空,则不能插入,返回状态为ERROR
return ERROR;
DuLNode s = (DuLNode)malloc(sizeof(DuLNode));
s->prior = p->prior;
p->prior->next = s;
s->next = p;
p->prior = s;
return OK;
}
循环链表(c)
// 双向链表的删除,删除双向链表中的第i个元素
Status ListDelete_DuL(DuLinkList &L,int i)
{
DuLNode p = (DuLNode)malloc(sizeof(DuLNode));
if(!(p = !(GetElem(L,i)))) // 如果该位置为空,则不能插入,返回状态为ERROR
return ERROR;
p->prior->next = p->next;
p->next->prior = p->prior;
free(p);
return OK;
}

上一篇:双向列表关键点


下一篇:Image Processing Using Multi-Code GAN Prior 论文解读