作業二 雙向鍊錶

2022-05-25 05:09:07 字數 1270 閱讀 7398

首先我們來看雙向鍊錶的定義  :

typedef  int elemtype;

typedef struct node * ptrtonode;

typedef ptrtonode position;

struct dlistnode;

typedef dlistnode * dlist;

typedef struct node

node;

struct dlistnode

示意圖大概是這樣的

dlistnode是什麼呢?相當於乙個指路牌,讓你可以直接走向頭結點或尾節點。

雙向鍊錶要注意的是,如果只有乙個節點 a,那麼a既是頭結點,也是尾節點。

所以我們在寫插入刪除操作的時候要進行分類討論。

2264,插入 i

void insertathead(dlist l, elemtype x)

else

l->size++;

}

//鍊錶鏈結的時候基本準則都是先連線再斷開,雖然兩個指標操作有點麻煩,但是還是比較好理解的

2265  插入2

void insertattail(dlist l, elemtype x)

else

l->size++;

}

2271,刪除 i

void delfirst(dlist l, elemtype *e)

else

*e = p->data;

free(p);

l->size--;

}

2272 刪除 ii

void dellast(dlist l, elemtype *e)

else

*e = p->data;

free(p);

l->size--;

}

鍊錶清空(非銷毀的時候)要把每項數字清零,並改正size的值(head、tail指向空別忘了)

2275 雙向鍊錶的清空

void clearlist(dlist l)

l->size = 0;

l->head = null;

l->tail = null;

}

其他的插入刪除思路可以參考上面,剩下的比較簡單就不說了

1 5 雙向鍊錶

實現 public class doublelinkedlistdemo 鍊錶操作類 class doublelinkedlist 新增節點 同單向,但有點區別,加上前乙個指標 public void add heronode2 heronode2 temp.next heronode2 heron...

20 雙向鍊錶

1 define crt secure no warnings 23 include4 include5 include67 define ok 1 8 define error 0 9 define true 1 10 define false 0 1112 typedef int elemtyp...

06 雙向鍊錶

修改 原理與單鏈表相同 刪除public class doublelinkedlist 新增結點到雙向鍊錶 追加 public void add heronode2 node 按編號順序將結點到鍊錶 如果有這個排名,則新增失敗,並給出提示 public void insertbyorder hero...