資料結構
typedef struct lnodelnode, *dlinklist;
雙向鍊錶的原子操作實現
1.建立鍊錶
status listcreate_dl(dlinklist &l, int n)
p->next = null; //表尾賦空
return ok;
}
2.刪除鍊錶
status listdestroy_dl(dlinklist &l)
l = null;
return ok;
}
3.插入元素
status listinsert_dl(dlinklist &l, int n, elemtype e)
if(!p || n<0) //第n-1個節點不存在或者n<0
return error;
lnode *q;
q = (lnode *) malloc(sizeof(lnode));
if(!q)
exit(overflow);
q->data = e;
q->next = p->next;
p->next->pre = q;
p->next = q;
q->pre = p;
return ok;
}
4.追加元素
while(p->next) //定位到表尾
p = p->next;
lnode *q;
q = (lnode *) malloc(sizeof(lnode));
if(!q)
exit(overflow);
q->data = e;
q->next = p->next;
q->pre = p;
p->next = q;
return ok;}
5.刪除元素
status deleteelem_dl(dlinklist &l,int n,elemtype &e)
if(!p || n<0) //第n個元素不存在 或 n<0
return error;
p->next->pre = p->pre; //將待刪除節點從鍊錶斷開
p->pre->next = p->next;
e = p->data;
free(p); //刪除節點
return ok;
}
6.獲取元素
status getelem_dl(dlinklist l,int n,elemtype &e)
if(!p || n<0) //第n個元素不存在 或 n<0
return error;
e = p->data;
return ok;
}
7.獲得表長
int listlength_dl(dlinklist l)
return n;
}
8.列印表
void printlist_dl(dlinklist l)
lnode *p = l->next;
while(p)
printf("\n");
}
完整** 線性表 雙向鍊錶
雙向鍊錶是一種特殊的鍊錶。單鏈表和雙向鍊錶的區別 單鏈表 只能向乙個方向遍歷 雙向鍊錶 向兩邊都可以遍歷。雙向鍊錶的實現 為了找到節點和前驅,我們給節點增加乙個指向其前驅的指標,如下圖所示 既然單鏈表可以迴圈,那麼雙向鍊錶也就可以迴圈,如下圖所示即為雙向迴圈鍊錶 建立雙向鍊錶和建立單鏈表大同小異,雙...
線性表之雙向鍊錶
include include define error 0 define ok 1 typedef int status typedef int elemtype typedef struct dulnodedulnode,dulinklist 雙向鍊錶的結構體 兩個指標,分別指向前乙個和後乙個節...
線性表之雙向鍊錶
雙向鍊錶 include include 狀態量 define ok 1 define error 0 adt 雙鏈表結構說明 typedef int elemtype typedef struct dnodedlistnode typedef dlistnode dlinklist 節點 模組定義...