資料結構 雙向鍊錶

2021-06-11 08:39:14 字數 2204 閱讀 7251

前幾天寫了乙個單向鍊錶,今天參考自己單向鍊錶改寫了乙個雙向非迴圈鍊錶,下面只討論雙向非迴圈鍊錶。

雙向非迴圈鍊錶有如下特點:

一、雙向鍊錶每個結點都有乙個前驅指標和後驅指標(當然頭結點和尾結點除外)。

二、雙向鍊錶中的任意乙個結點開始,都可以很方便地訪問它的前驅結點和後繼結點。

三、頭結點只有後驅指標沒有前驅指標,尾結點後驅指標指向null。

一、初始化資料結構

/*定義雙向鍊錶結構*/

typedef struct _double_link_node

double_link_node;

二、建立乙個頭結點

/*建立乙個雙向鍊錶,返回乙個空結點*/

double_link_node *create_double_link()

new->data = 0;

new->prev = null;

new->next = null;

return new;

}

三、向雙向鍊錶中插入乙個節點(順序插入)

/*插入結點*/

int insert_note(double_link_node *head, int value)

new->data = value;

while((current->next != null) && (value > current->next->data))

if(current->next == null) /*為空或者查詢到最後插入*/

else

}else

return 0;

}

四、刪除節點(順序查詢到後刪除)

/*刪除節點*/

int delete_note(double_link_node *head, int valude)

if(current == null) //等於null有兩種情況:(1)查詢到最後、(2)節點為空

else

return -1;

} else

else if(current->next == null) //最後乙個節點

else //中間刪除

free(current);

printf("delete node success!\n"); }

return 0;

}

五、查詢節點

/*查詢指定節點*/

int search_link(double_link_node *head, int key)

if(current == null) //鍊錶為空或者沒有查詢到

else

return -1;

}else

return 0;

}

六、測定結點個數

/*測鍊錶長度*/

int length_link(double_link_node *head)

return count;

}

七、釋放鍊錶

/*釋放鍊錶*/

void free_link(double_link_node *head)

free(head);

printf("free link success!");

exit(0);

}

八、遍歷輸出鍊錶(有反向輸出,檢查前驅指標是否連線好)

/*列印鍊錶*/

void print_link(double_link_node *head)

printf("\n");

}void print_link(double_link_node *head)

while(current != head->next)

printf("%d<==>", current->data);

}printf("\n");

}

呼叫介面沒有給出,可以自己寫。。也可以參考我上次寫的單向鍊錶介面。

資料結構 鍊錶 雙向鍊錶

注意typedef的定義結構,以及dinklist的資料型別 typedef struct dnode dnode,dinklist 注意插入第乙個結點時,prior指標的空指向問題 if l next null 若l後繼結點為空 則省略該步驟 l next prior p 基本 頭插法建立雙向鍊錶...

資料結構 雙向鍊錶

單鏈表的單向性 只能從頭結點開始高效訪問鍊錶中的資料元素。單鏈表還存在另乙個缺陷 逆序訪問時候的效率極低。如下 linklistlist for int i 0 i 5 i for int i list.length 1 i 0 i 根據大o推算法可以得出乙個for迴圈的時間複雜度為o n get ...

資料結構 雙向鍊錶

帶頭節點的雙向鍊錶 dlinklist.h pragma once include include include typedef int dlinktype typedef struct dlinknode dlinknode void dlinklistinit dlinknode head 初...