int型双链表
大学基础数据结构
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef struct LNode {
ElemType data;
struct LNode* next;
struct LNode* prior;
}LNode, *DLinkList;
bool InitDLinkList(DLinkList&L) {
L = (LNode*)malloc(sizeof(LNode));
if (L == NULL) return false;
L->next = NULL;
L->prior = NULL;
return true;
}
bool InsertNextNode(LNode* p,ElemType e) {
if (p == NULL)return false;
LNode* s = (LNode*)malloc(sizeof(LNode));
s->data = e;
if (p->next == NULL) {
s->next = NULL;
s->prior = p;
p->next = s;
}
else {
s->next = p->next;
s->prior = p;
s->next->prior = s;
p->next = s;
}
}
bool InsertPriorNode(LNode* p, ElemType e) {
if (p == NULL) return false;
LNode* s = (LNode*)malloc(sizeof(LNode));
s->data = e;
if (p->prior == NULL) {
s->next = p;
s->prior = NULL;
p->prior = s;
}
else {
s->next = p;
s->prior = p->prior;
s->prior->next = s;
s->next->prior = s;
}
}
bool DeletNode(LNode* p) {
if (p == NULL||p->prior == NULL) return false;
else if (p->next==NULL) {
p->prior->next= NULL;
free(p);
}
else {
p->prior->next = p->next;
p->next->prior = p->prior;
free(p);
}
}
LNode* GetNode_i(DLinkList L,int i) {
if (i < 0) return NULL;
LNode* p = L;
int j = 0;
while (p!=NULL&&j<i) {
p = p->next;
j++;
}
return p;
}
LNode* GetNode_val(DLinkList L, ElemType e) {
if (L == NULL) return L;
LNode* p = L->next;
while (p != NULL && p->data != e) {
p = p->next;
}
return p;
}
bool Insert_i(DLinkList& L, int i, ElemType e) {
if (i < 1) return false;
LNode* p=GetNode_i(L, i - 1);
InsertNextNode(p, e);
}
bool head_Insert_fun1(DLinkList& L) {
LNode* p = L;
int x;
scanf("%d", &x);
while (x!=9999) {
InsertNextNode(p, x);
p = p->next;
scanf("%d", &x);
}
return true;
}
bool head_Insert(DLinkList& L) {
LNode* p = L;
int x;
scanf("%d", &x);
while (x != 9999) {
InsertNextNode(p, x);
scanf("%d", &x);
}
return true;
}
void PrintList(DLinkList L) {
LNode* p = L->next;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
}
int list_len(DLinkList L) {
int i=0;
LNode* p = L;
while (p->next != NULL) {
i++;
p = p->next;
}
return i;
}
bool tail_insert(DLinkList& L) {
int i=list_len(L);
LNode* r=GetNode_i(L,i);
int x;
scanf("%d", &x);
while (x != 9999) {
InsertNextNode(r, x);
r = r->next;
scanf("%d", &x);
}
return true;
}
int main() {
DLinkList L=NULL;
InitDLinkList(L);
head_Insert(L);
LNode* p=GetNode_i(L, 1);
InsertNextNode(p, 6666);
InsertPriorNode(p, 8888);
tail_insert(L);
PrintList(L);
}