双链表有关操作
双链表有关操作
双链表的初始化
#include<stdio.h>
typedef struct DNode{
int data;
struct DNode *prior,*next;
}DNode,*DLinklist;
//初始化双链表
bool InitDLinkList(DLinklist &L){
L=(DNode*)malloc(sizeof(DNode)); //分配一个头结点
if(L==NULL){
return false;
}
L->prior=NULL; //头结点的prior永远为NULL
L->next=NULL;
return true;
}
//链表判空
bool Empty(DLinklist L){
if(L->next==NULL)
return true;
else
return false;
}
void main(){
DLinklist L;
InitDLinkList(L);
}
双链表的插入
bool InsertNextDNode(DNode *p,DNode *s){
if(p==NULL||s==NULL){
return false;
}
s->next=p->next; //将结点*s插入到结点*p之后
if(p->next!=NULL)
p->next->prior=s;
s->prior=p;
p->next=s;
return true;
}
双链表结点的删除
//删除p结点的后继结点
bool InsertNextDNode(DNode *p){
if(p==NULL){
return false;
}
DNode *q=p->next; //找到p的后继结点
if(q==NULL){
return false; //p没有后继结点
}
p->next=q->next;
if(q->next!=NULL) //q结点不是最后一个结点
q->next->prior=p
free(q); //释放结点空间
return true;
}
销毁一个双链表
双链表的遍历