#include<iostream>
using namespace std;
//循环链表的存储结构
typedef struct DulNode
{
ElemType data;
struct DuLNode *prior;//直接前驱结点
struct DuLNode *next;//直接后驱节点
}DulNode,*DuLinkList;
//由于循环链表和单链表的查询没有区别,可以参考我上期的单链表的操作
//主要编写一下删除和插入操作
Status ListInsert(LinkList *L,int i,ElemType e)
{
int j;
LinkList p,s;
p=*L;
j=1;
while(p&&j<i)
{
p=p->next;
j++;
}
if(j>i||!p)
{
return ERROR;
}
s=(LinkList)malloc(sizeof(Node));
s->data=e;
//主要的区别
//顺序为插入节点先先驱,后后驱;再旧结点的先先驱。后后驱
s->prior=p;
s->next=p->next;
p->next->prior=s;
p->next=s;
return OK;
}
//删除元素操作
Status ListDelete(LinkList *L,int i,ElemType *e)
{
int j;
LinkList p,q;
p=*L;
j=1;
while(p&&j<i)
{
p=p->next;
j++;
}
if(j>i||!p)
{
return ERROR;
}
q=p->next;
*e=q->data;
//改变的地方
q->prior->next=q->next;
q->next->prior=q->prior;
free(q);
return OK;
}
数据结构那点事--线性表(循环列表)
最新推荐文章于 2022-02-11 21:56:37 发布