線性表 雙鏈表

2021-07-15 12:15:43 字數 2026 閱讀 9824

雙鏈表也是線性表的一種,它的全稱是:線性雙向鏈結表,它有以下特點:

在每個節點中除包含有數值域外,設定有兩個指標域,分別用以指向其前驅節點和後繼節點。

既可以依次向後訪問每乙個節點,也可以依次向前訪問每乙個節點。

dlinklist.h如下:

#include 

#include

typedef

int elemtype;

typedef

struct nodedlinklist;

dlinklist.cpp如下:

#include "dlinklist.h"

#include

void headinit(dlinklist * &dll,elemtype arr, int n);

void printdoublelinklist(dlinklist * dll);

void tailinit(dlinklist * &dll,elemtype arr, int n);

bool insertelement(dlinklist *&dll, int pos, elemtype e);

bool deleteelement(dlinklist *&dll, int pos, elemtype &e);

int main() ;

headinit(dll,arr,5);

printf("頭插法:\t");

printdoublelinklist(dll);

tailinit(dll,arr,5);

printf("尾插法:\t");

printdoublelinklist(dll);

insertelement(dll,3,6);

printf("在第3個位置上插入6之後:\t");

printdoublelinklist(dll);

elemtype e;

deleteelement(dll,3,e);

printf("刪除第3個元素之後:\t");

printdoublelinklist(dll);

}//頭插法

void headinit(dlinklist * &dll,elemtype arr, int n)

node->prior = dll;

dll->next = node;

}}//尾插法

void tailinit(dlinklist * &dll,elemtype arr, int n)

r=null;

}//插入節點,找出前乙個節點

bool insertelement(dlinklist *&dll, int pos, elemtype e)

if(p==null)else

p->next = node;

return

true;

}}bool deleteelement(dlinklist *&dll, int pos, elemtype &e)

if(p==null)else

e = node->data;

p->next = node->next;

if(p->next != null)

free(node);

return

true;

}}void printdoublelinklist(dlinklist * dll)

printf("\n");

}

輸出結果為:

頭插法:    5   4   3   2   1   

尾插法: 1 2 3 4 5

在第3個位置上插入6之後: 1 2 6 3 4 5

刪除第3個元素之後: 1 2 3 4 5

線性表 雙鏈表

雙鏈表的結點結構 空的雙向鍊錶 處理原則 先在正向鍊錶上插入,再在逆向鍊錶上插入 q rlink p rlink p rlink q q llink p q rlink llink q 在表尾進行插入時 q rlink p rlink p rlink q q llink p if q rlink q...

線性表3 雙鏈表

雙鏈表的每個節點包含三個部分 該節點的資料域,節點的直接前驅,節點的直接後繼。插入 不管是在節點p前插入新節點s,還是在p節點後插入節點s,這裡有個比較容易記和理解的地方 不管是哪種操作,都後處理p.prior和p.next就對了。解釋下,如果在p之前插入節點s,首先要做的部分是s.prior p....

線性表 雙鏈表(非迴圈)

s1雙鏈表定義 1 雙 向 鍊錶中有兩條方向不同的鏈,即每個節點中除next域存放後繼結點地之外,還增加乙個指向其直接前驅的指標域prior。2 哨兵節點時隔啞物件,可以簡化邊界條件。s2雙鏈表前插與刪除節點操作 1 雙向鍊錶的前插操作。由於雙鏈表的對稱性,在雙鏈表中能完成各種插入與刪除操作 2 雙...