双向单链表操作
双向链表节点定义
typedef struct List
{
ElemType data;
struct List *prior;
struct List *next;
}linklist;
双向链表创建
linklist *Create (linklist *phead)
{
linklist *pnew,*ptail;
phead->next =NULL;
phead->prior =NULL;
ptail=phead;
pnew=( linklist *)malloc(sizeof(linklist));
scanf("%d",& pnew->data);
while(pnew ->data!=0){
ptail->next =pnew ;
pnew-> prior=ptail;
ptail=pnew;
ptail->next =NULL;
pnew=( linklist *)malloc(sizeof(linklist));
scanf("%d",& pnew->data);
}
return phead;
}
双向链表的简单插入
linklist *listinsert(linklist * phead,int i,ElemType e)
{
int j;
linklist *p,*q;
q= phead;
p=(linklist *)malloc(sizeof(linklist));
if(!p)
return ERROR;
p->data=e;
for(j=0;j<i-1;++j)
{
q=q->next;
}
p->next=q->next;
q->next->prior=p;
q->next=p;
p->prior=q
return phead;
}
双向链表的删除
linklist *listdel(linklist * phead,int i)
{
int j;
linklist *p;
linklist *q;
p= phead;
for(j=0;j<i-1;++j)
{
p=p->next;
}
q=p->next;
p->next=q->next;
q->next->prior=p
free(q);
return phead;
}
双向链表合并
linklist *MergeList(linklist *La,linklist *Lb )
{
linklist *Lc;
linklist *pa,*pb,*pc;
pa=La->next;pb=Lb->next;
Lc=pc=La;
while(pa&&pb)
{
if(pa->data<=pb->data)
{
pc->next=pa;pc=pa;pa=pa->next;
}
else
{
pc->next=pb;pc=pb;pb=pb->next;
}
}
pc->next=pa?pa:pb;
return Lc;
}
双向链表显示
Status display(linklist *phead)
{
linklist *p;
p=phead->next;
while(p)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
return OK;
}