#include <iostream>
#include <stdlib.h>
using namespace std;
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;
}
//在p结点之后插入s结点
bool InsertNextDNode(DNode* p, DNode* s) {
if (p == NULL || s == NULL)
return false;
s->next = p->next;
if (p->next != NULL) //如果p结点有后继结点
p->next->prior = s;
s->prior = p;
p->next = s;
return true;
}
//删除p结点的后继结点
bool DeleteNextDNode(DNode* p){
if (p == NULL) return false;
DNode* q = p->next; //找到p的后继结点q
if (q == NULL) return false; //p没有后继
p->next = q->next;
if (q->next != NULL)
q->next->prior = p; //q结点不是最后一个结点
free(q);
return true; //释放结点空间
}
//销毁双链表
void DestoryList(DLinklist& L) {
//释放各个数据结点
while (L->next != NULL)
DeleteNextDNode(L);
free(L); //释放头结点
L = NULL; //头指针指向NULL
}
//指定结点的前项遍历
bool f(DNode* p) {
if (p == NULL) return false;
while (p != NULL) {
cout << p->prior << endl;
p = p->prior;
}
}
int main(){
DLinklist L;
InitDLinkList(L);
}