源码
#include <iostream>
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;
L->next = NULL;
return true;
}
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;
}
bool InsertBeforeDNode(DNode *p, DNode *s){
if (p == NULL || s == NULL) {
return false;
}
p->prior->next = s;
s->prior = p->prior;
s->next = p;
p->prior = s;
return true;
}
bool InsertDNode(DLinkList &L,int i, int data){
DNode *p;
p = L;
int j = 0;
while (p != NULL && j < i - 1) {
p = p->next;
j++;
}
DNode *s = (DNode *) malloc(sizeof(DNode));
if (s == NULL) {
return false;
}
s->data = data;
p->next = s;
s->prior = p;
return true;
}
bool DeleteDNode(DNode *p){
if (p == NULL) {
return false;
}
DNode *q = p->prior;
DNode *n = p->next;
if (n != NULL) {
q->next = n;
n->prior = q;
}
free(p);
return true;
}
bool DeleteNextDNode(DNode *p){
if (p == NULL) {
return false;
}
DNode *q = p->next;
if (q == NULL) {
return false;
}
p->next = q->next;
if (q->next != NULL) {
q->next->prior = p;
}
free(q);
return true;
}
bool DeleteBeforeDNode(DNode *p){
if (p == NULL) {
return false;
}
DNode *q = p->prior;
q->prior->next = p;
p->prior = q->prior;
free(q);
return true;
}
bool Empty(DLinkList L){
if (L->next == NULL) {
return true;
} else {
return false;
}
}
void DisplayDLinkList(DLinkList L){
DNode *p;
p = L->next;
int i = 0;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
i++;
}
printf("\n");
printf("一共有%d个元素\n", i);
}
int main(){
DLinkList L;
InitDLinkList(L);
}