/*
實現雙鏈表的構建、初始化、資料新增(在指定位置新增)、資料刪除(刪除指定元素,並返回該元素的位置)的演算法設計;
*/#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...
資料結構之雙鏈表
前面我們介紹了單鏈表,單鏈表的優點是沒有空間的限制,可以隨意開闢空間。但與我們這次要講的雙鏈表相比,就有點相形見絀了。因為哪怕是單鏈表,在進行查詢 插入 排序等等時都要進行線性表的遍歷,而我們往往需要的是目標節點的前乙個節點,所以經常一不小心就錯過了我們需要的節點,或者經常需要乙個當前節點的備份,以...