#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct DulNode
{
ElemType data;
struct DuLNode *prior;
struct DuLNode *next;
}DuLNode,*DuLinkList;
//L->next=L;空的双向循环链表
//p->next->prior=p->prior->next=p; 双向循环链表
//双向链表初始化
Status InitList(DuLinkList p)
{
p->prior=p;
p->next=p;
}
//判断是否为空
Status ListEmpty(DuLinkList p)
{
if(p==NULL) printf("头结点为NULL\n");
if(p->next==p) return OK;
return ERROR;
}
//求双向循环链表的表长
int ListLength(DuLinkList p)
{
DuLinkList q=p;
if(p==NULL)
printf("头结点为NULL\n");
int i=0;
while(q->next!=p)
{
i++;
p=p->next;
}
return i;
}
//获取某元素
DuLinkList ListGet(DuLinkList p,int i)
{
DuLinkList q=p,pm=NULL;
if(p==NULL)
printf("头结点为NULL");
while(i--&&q->next!=p) //找到i结点的前一个结点
{
q=q->next;
}
if(i!=-1)
{
printf("删除参数不合法\n");
return ERROR;
}
pm=q->next;
return pm;
}
//
//双向链表的插入
Status ListInsert_DuL(DULinkList &L,int i,ElemType e)
{
DuLinkList p,s;
if(!(p=LinkGet(L,i)))
return ERROR;
s=new DuLNode;
s->data=e;
s->prior=p->prior;
p->prior->next=s;
s->next=p;
p->prior=s;
return OK;
}
//双向链表的删除
Status ListDelete_DuL(DuLinkList &L,int i,ElemType &e)
{
if(!(p=LinkGet(L,i)))
return ERROR;
e=p->data;
p->prior->next=p->next;
p->next->prior=p->prior;
delete p;
return OK;
}
Algorithms for doubly linked lists--initialization, insertion, deletion, search, acquisition, null, and table length
Guess you like
Origin blog.csdn.net/September_C/article/details/105544732
Ranking