資料結構與演算法之雙鏈表的操作

2021-09-28 13:39:31 字數 2481 閱讀 9039

/*

實現雙鏈表的構建、初始化、資料新增(在指定位置新增)、資料刪除(刪除指定元素,並返回該元素的位置)的演算法設計;

*/#include

#include

using

namespace std;

typedef

struct _doublelink dblinklist, dblinknode;

//初始化雙鏈表

bool

initlist

(dblinklist*

&l)//前插法新增雙向鍊錶元素

bool

addlinkfront

(dblinklist*

&l, dblinknode* s)

else

return

true;}

//尾插法新增雙向鍊錶元素

bool

(addlinklasr

(dblinklist*

&l,dblinknode* s)

)//列印輸出雙向鍊錶

void

printlinkst

(dblinklist*

& l)

return;}

//在雙向鍊錶中插入指定元素

bool

insert

(dblinklist*

& l,

int i,

int x)

else

}return

false;}

//在雙向鍊錶中刪除指定元素

bool

deletelist

(dblinklist*

&l,int element,

int&index)

else}if

(p->next-

>data == element)

return

false;}

intmain

(void

)else

int chose;

//由使用者選擇是用前插法還是尾插法插入資料!

//由使用者選擇是用前插法還是尾插法

cout <<

"請選擇使用前插法插入資料還是使用尾插法插入資料!"

<< endl;

cout <<

"若要使用前插法插入資料請輸入: 1"

<< endl;

cout <<

"若要使用尾插法插入資料請輸入: 2"

<< endl;

cin >> chose;

cout <<

"請輸入要插入的元素個數: "

<< endl;

int num =0;

//使用者要插入的元素個數

cin >> num;

//由使用者選擇何種方插入元素

switch

(chose)

else

num--;}

break

;case2:

while

(num >0)

else

num--;}

break

;default

: cout <<

"輸入不合法!!!!, 請重新輸入"

<< endl;

while(1

)break;}

printlinkst

(l);

int i;

// 插入的位置

int x;

//插入的值

cout <<

"請輸入你想要插入的位置: "

; cin >> i;

cout <<

"請輸入你想要插入的元素: "

; cin >> x;

//實現雙鏈表的構建、資料新增、資料刪除的演算法設計;if(

insert

(l, i, x)

)else

printlinkst

(l);

// 實現雙鏈表的構建、資料新增、資料刪除的演算法設計;

int element;

//要刪除的元素

int index =0;

//要刪除的元素的位置

cout <<

"請輸入要刪除的元素的值: "

; cin >> element;if(

deletelist

(l, element, index)

)else

printlinkst

(l);

system

("pause");

return0;

}

前插法:

尾插法:

資料結構與演算法 雙鏈表

刪除結點 遍歷元素 雙鏈表的高階操作 與單鏈表一樣,我還是建議用過掌握基礎操作來拼湊成大的操作。單鏈表指標域只有乙個next指標,指向下乙個結點,這就導致了它只能從前往後訪問。為了彌補這一缺陷,我們可以往指標域裡再加入乙個指標prior,用於指向前面的結點,這樣就可以實現雙向訪問了 與單鏈表相似,建...

資料結構 雙鏈表的操作

1 利用尾插法建立乙個雙向鍊錶。2 遍歷雙向鍊錶。3 實現雙向鍊錶中刪除乙個指定元素。4 在非遞減有序雙向鍊錶中實現插入元素e仍有序演算法。5 判斷雙向鍊錶中元素是否對稱若對稱返回1否則返回0。6 設元素為正整型,實現演算法把所有奇數排列在偶數之前。include include define el...

資料結構之雙鏈表

前面我們介紹了單鏈表,單鏈表的優點是沒有空間的限制,可以隨意開闢空間。但與我們這次要講的雙鏈表相比,就有點相形見絀了。因為哪怕是單鏈表,在進行查詢 插入 排序等等時都要進行線性表的遍歷,而我們往往需要的是目標節點的前乙個節點,所以經常一不小心就錯過了我們需要的節點,或者經常需要乙個當前節點的備份,以...