C C 實現線性表中的雙向鍊錶

2021-10-05 14:47:23 字數 1779 閱讀 8651

資料結構

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 節點 模組定義...