#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node *prior, *next;
} DNode, *DLinkList;
int InsertNextDNode(DNode *p, DNode *s);
int DeleteNextDNode(DNode *p);
// 带头结点
DLinkList InitList() {
DNode *p = (DNode *)malloc(sizeof(DNode));
if (p == NULL) return NULL;
p->prior = NULL;
p->next = NULL;
return p;
}
// 带头结点
int ListInsert(DLinkList l, int i, int e) {
if (i < 1) return -1;
DNode *p = l;
int j = 0;
while (p != NULL && j < i-1) {
p = p->next;
j++;
}
if (p == NULL) return -1;
DNode *s = (DNode *)malloc(sizeof(DNode));
if (s == NULL) return -1;
s->data = e;
s->next = NULL;
InsertNextDNode(p, s);
return 1;
}
// 带头结点
int ListDelete(DLinkList l, int i, int *e) {
if (i < 1) return -1;
DNode *p = l;
int j = 0;
while (p != NULL && j < i-1) {
p = p->next;
j++;
}
if (p == NULL) return -1;
DNode *q = p->next;
if (q == NULL) return -1;
*e = q->data;
return DeleteNextDNode(p);
}
// 通用接口
int InsertNextDNode(DNode *p, DNode *s) {
if (p == NULL || s == NULL) return -1;
s->next = p->next;
if (p->next != NULL) {
p->next->prior = s;
}
s->prior = p;
p->next = s;
return 1;
}
// 通用接口
int DeleteNextDNode(DNode *p) {
if (p == NULL) return -1;
DNode *q = p->next;
if (q == NULL) return -1;
p->next = q->next;
if (q->next != NULL) {
q->next->prior = p;
}
free(q);
return 1;
}
// 通用接口
int Length(DLinkList l) {
DNode *p = l;
int i = 1;
while (p->next != NULL) {
p = p->next;
i++;
}
return i;
}
// 通用接口
void PrintfList(DLinkList l) {
DNode *p = l;
while (p != NULL) {
printf("%i\n", p->data);
p = p->next;
}
}
// 通用接口
int Empty(DLinkList l) {
return l == NULL ? 1 : -1;
}
// 通用接口
void DestroyList(DLinkList *l) {
while ((*l)->next != NULL) {
DeleteNextDNode((*l));
}
free((*l));
*l = NULL;
}
// 分割线
void Sep() {
printf("**************\n");
}
int main() {
DLinkList l = InitList();
ListInsert(l, 1, 34);
ListInsert(l, 2, 123);
ListInsert(l, 2, 66);
ListInsert(l, 4, 43);
PrintfList(l->next);
int e = -1;
ListDelete(l, 3, &e);
Sep();
printf("%i\n", e);
Sep();
PrintfList(l->next);
return 0;
}
双链表
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 线性表按存储方式分为顺序表和链表两种,其中链表又分为单链表,循环链表,双链表,双向循环链表。 顺序表 顺序表采用顺...
- 元素域 data 用来存放具体的数据。 链接域 prev 用来存放上一个节点的位置。 链接域 next 用来存放下...
- 联合体 联合体:多个成员变量公用同一块空间,一个时间段只能用其中的一个成员.如果成员变量都是基本数据类型,那么这个...