数据结构——双链表的初始化及插入、删除

//双链表的相关操作

#include
#include
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;
	L->next=NULL;
	return true;
} 

//双链表的插入,在p结点之后插入s结点 
bool InsertNextDNode(DNode *p,DNode *s){
	if(p= =NULL||s==NULL){
		return false;
	}
	s->next=p->next;
	if(p->next!=NULL){
		p->next->prior=s;
	}
	s->prior=p;
	p->next=s;
	return true; 
}
 
//双链表的删除,删除p后的结点
bool DeleteNextDNode(DNode *p){
	DNode *q;
	if(p= =NULL){
		return false;
	}
	q=p->next;
	if(q==NULL){
		return false;
	}
	p->next=q->next;
	if(q->next!=NULL){
		q->next->prior=p;
	}
	free(q);
	return true;
} 

//释放删除整个链表
void DestoryList(DLinklist &L){
	while(L->next!=NULL){
		DeleteNextDNode(L);
	}
	free(L);
	L=NULL;
} 
//后向遍历:
while(p!=NULL){
	p=p->next;
} 

//前向遍历
while(p!=NULL){
	p=p->prior;
} 

//前项遍历 跳过头结点
while(p->prior!=NULL){
	p=p->prior;
} 

你可能感兴趣的:(数据结构)