#include <iostream>
#include <list>
using namespace std;
int main(){
list<char> L; //用于生成管理char型元素的双向链表
L.push_front('b'); //在表的开头添加元素 b [b]
L.push_back('c'); //在表的末尾添加元素 c [bc]
L.push_front('a'); //在表的开头添加元素 a [abc]
cout<<L.front(); //a
cout<<L.back(); //c
L.pop_front(); //删除位于表幵头的元素
L.push_back('d'); //在表的末尾添加元素 d
cout<<L.front(); //b
cout<<L.back()<<endl;//d
return 0;
}
函数名 | 功能 |
---|---|
size() | 返回表的元素数 |
begin() | 返回指向表开头的迭代器 |
end() | 返回指向表末尾 ( 最后一个元素的后一个位置 ) 的迭代器 |
push_front(x) | 在表的开头添加元素 x |
push_back(x) | 在表的末尾添加元素 x |
pop_front() | 删除位于表幵头的元素 |
pop_back() | 删除位于表末尾的元素 |
insert(p,x) | 在表的位置 p处插入元素 x |
erase( p ) | 删除表中位置P的元素 |
clear | 删除表中所有元素 |
Doubly Linked List
请实现能执行以下命令的双向链表。
insert x : 在链表开头添加含有键值x的结点
delete x:删除第1个含有键值x的结点
deleteFirst :删除链表的表头结点
deleteLast: 删除链表的表尾结点
#include <cstdio>
#include <list>
#include <algorithm>
using namespace std;
int main() {
int q, x;
char com[20];
//使用标准库中的list
list<int> v;
scanf("&d", &q);
for (int i = 0; i < q; i++) {
scanf("%s", com);
if (com[0] == 'i') {//insert
scanf("%d", &x);
v.push_front(x);
}
else if (com[6] == 'L') {//deleteLast
v.pop_back();
}
else if (com[6] == 'F') {//deleteFirst
v.pop_front();
}
else if (com[0] == 'd') {//delete
scanf("%d", &x);
for (list<int>::iterator it = v.begin(); it != v.end(); it++) {
if (*it == x) {
v.erase(it);
break;
}
}
}
}
int i = 0;
for (list<int>::iterator it = v.begin(); it != v.end(); it++) {
if (i++) printf(" ");
printf("%d ", *it);
}
printf("\n");
return 0;
}