#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);
// 帶頭結(jié)點
DLinkList InitList() {
DNode *p = (DNode *)malloc(sizeof(DNode));
if (p == NULL) return NULL;
p->prior = NULL;
p->next = NULL;
return p;
}
// 帶頭結(jié)點
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;
}
// 帶頭結(jié)點
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;
}
雙鏈表
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進店門蹂楣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人讯蒲,你說我怎么就攤上這事痊土。” “怎么了墨林?”我有些...
- 文/不壞的土叔 我叫張陵赁酝,是天一觀的道長。 經(jīng)常有香客問我旭等,道長酌呆,這世上最難降的妖魔是什么? 我笑而不...
- 正文 為了忘掉前任搔耕,我火速辦了婚禮隙袁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘弃榨。我一直安慰自己菩收,他們只是感情好,可當(dāng)我...
- 文/花漫 我一把揭開白布鲸睛。 她就那樣靜靜地躺著娜饵,像睡著了一般。 火紅的嫁衣襯著肌膚如雪官辈。 梳的紋絲不亂的頭發(fā)上箱舞,一...
- 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼胡桨!你這毒婦竟也來了官帘?” 一聲冷哼從身側(cè)響起,我...
- 正文 年R本政府宣布肾筐,位于F島的核電站,受9級特大地震影響缸剪,放射性物質(zhì)發(fā)生泄漏吗铐。R本人自食惡果不足惜,卻給世界環(huán)境...
- 文/蒙蒙 一橄登、第九天 我趴在偏房一處隱蔽的房頂上張望抓歼。 院中可真熱鬧,春花似錦拢锹、人聲如沸谣妻。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽蹋半。三九已至,卻和暖如春充坑,著一層夾襖步出監(jiān)牢的瞬間减江,已是汗流浹背。 一陣腳步聲響...
推薦閱讀更多精彩內(nèi)容
- 線性表按存儲方式分為順序表和鏈表兩種,其中鏈表又分為單鏈表腰根,循環(huán)鏈表激才,雙鏈表,雙向循環(huán)鏈表额嘿。 順序表 順序表采用順...
- 元素域 data 用來存放具體的數(shù)據(jù)。 鏈接域 prev 用來存放上一個節(jié)點的位置捕儒。 鏈接域 next 用來存放下...
- 1. 循環(huán)鏈表 與單鏈表基本無異,但有如下兩點需要注意:(1)最后一結(jié)點的指針域必須指向頭結(jié)點邓夕,這樣才能循環(huán)(注意...
- 聯(lián)合體 聯(lián)合體:多個成員變量公用同一塊空間,一個時間段只能用其中的一個成員.如果成員變量都是基本數(shù)據(jù)類型,那么這個...
- 雙向鏈表拓展1:前一節(jié)點的next可以看成是下一節(jié)點刘莹,某節(jié)點的pre可以看成是上一節(jié)點(偶爾會把next和pre看...