# 20001.数据结构 C++ 双向链表

/*
实现双向链表。
*/
#include<iostream>
typedef int ElemType;
typedef struct DuLnode {
ElemType data;
struct DuLnode* prior, * next;
/*
初始化双向列表。
*/
L = new DuLnode;
if (!L)
return false;
L->prior = NULL;
L->next = NULL;
return true;
}
/*
头插法创建双向链表。
*/
int n;
std::cout << "请输入您要插入元素的个数" << std::endl;
std::cin >> n;
std::cout << "请以此输入您要插入的元素" << std::endl;
std::cout << "头插法创建链表...." << std::endl;
while (n--) {
s = new DuLnode;
if (!s)
return false;
std::cin >> s->data;
s->next = L->next;
s->prior = L;
if(L->next)
L->next->prior = s;
L->next = s;
}
return true;
}
bool GetElem(DuLinklist L, int i, int& e) {
/*
双向链表取值；
*/
p = L->next;
for (int j = 0; j < i - 1; j++) {
if (!p)
return false;
p = p->next;
}
e = p->data;
return false;
}
int LocateElem(DuLinklist L, int e) {
/*
在双向列表中查找元素。
*/
p = L->next;
int j = 1;
while (p && p->data != e) {
p = p->next;
j++;
}
if (!p)
return 0;
return j;
}
p = L->next;
if (!p)
return false;
while (p) {
std::cout << p->data << " ";
p = p->next;
}
std::cout << std::endl;
return true;
}
bool ListInsert_L(DuLinklist& L, int i, int& e) {
/*
在双向链表的第i个位置插入元素e；
*/
p = L->next;
int j = 0;
while (p && j++ < i) {
p = p->next;
}
if (!p || j > i)
return false;
s = new DuLnode;
s->data = e;
p->prior->next = s;
s->prior = p->prior;
s->next = p;
p->prior = s;
return true;
}
bool ListDelete_L(DuLinklist& L, int i) {
/*
双向链表之删除元素。
*/
p = L->next;
int j = 0;
while (p && j < i-1) {
p = p->next;
j++;
}
if (!p || j > i)
return false;
if(p->next)
p->next->prior = p->prior;
p->prior->next = p->next;
delete p;
return true;
}
int main() {
InitList_L(L);
CreateDuList_H(L);
Print_DuList(L);
//int i, e;
//std::cout << "请输入您要取得数的位置" << std::endl;
//std::cin >> i;
//GetElem(L, i, e);
//std::cout << "您所取得数为：" << e << std::endl;
//Print_DuList(L);
//int e, i;
//std::cout << "请您输入你要查找的元素" << std::endl;
//std::cin >> e;
//i = LocateElem(L, e);
//std::cout << "您所查找的元素位于" << i << "位置" << std::endl;
//int i, e;
//std::cout << "请输入您要插入的元素的位置" << std::endl;
//std::cin >> i;
//std::cout << "请输入您要插入的元素" << std::endl;
//std::cin >> e;
//ListInsert_L(L, i, e);
int i;
std::cout << "请输入您要删除元素的位置" << std::endl;
std::cin >> i;
ListDelete_L(L, i);
Print_DuList(L);
return true;
}

|
2天前
|

【数据结构与算法】5、循环链表、约瑟夫问题、静态链表
【数据结构与算法】5、循环链表、约瑟夫问题、静态链表
22 0
|
3天前
|

11 0
|
4天前
|

|
1月前
|

【数据结构】哈希表—C/C++实现
【数据结构】哈希表—C/C++实现
30 0
|
1天前
|
Python
Python实现数据结构（如：链表、栈、队列等）。
Python实现数据结构（如：链表、栈、队列等）。
14 0
|
2天前
|

15 0
|
2天前
|

【数据结构与算法】3、虚拟头节点、动态数组的缩容、动态数组和单链表的复杂度、数组的随机访问
【数据结构与算法】3、虚拟头节点、动态数组的缩容、动态数组和单链表的复杂度、数组的随机访问
10 0
|
2天前
|

21 0
|
6天前
|
C语言 C++
【c++】用c++实现带头双向循环链表
【c++】用c++实现带头双向循环链表
16 1
|
26天前
|
Java C++ Python

23 0

• 云迁移中心

更多

更多