设有一个带头结点的、按元素值递减有序排列的双向循环链表,编写算法,插入一个元素并保持其有序性。
双向链表结点的类型定义如下:
typedef struct DuLNode{
int data;
struct DuLNode *prior;//指向前驱的指针
struct DuLNode *next;//指向后继的指针
}DuLNode,*DuLinkList;
这是一道考研题中的算法题,今天整理出来分享一下:
typedef int Status;
Status InitDuLinkList(DuLinkList &L,int e){
DuLinkList p,s;
p=L->next;
if(!(s=(DuLinkList)malloc(sizeof(DuLNode))))
return ERROR;
s->data = e;
while(p!=L && e < p->data){
p->prior->next = s;
s->prior = p->prior;
s->next = p;
p->prior = s;
}
return OK;
}