链表list
链表(List):支持在任意位置插入或删除,但只能按次序依次访问其中的元素
头文件< list >
链表的声明
list< type >s
链表的基本操作
push_back(x) 表尾添加元素x
pop_back() 删除表尾元素
push_front(x) 表头添加元素x
pop_front() 删除表头元素
erase(x) 删除迭代器x位置的元素
remove(x) 删除值为x的元素
链表的实现
双向链表的结点
struct Node{
int key;
Node *prev, *next;
}
初始化双向链表
Node *nil;
void init(){
nil=(Node *)malloc(sizeof(Node));
nil->next =nil
nil->prev =nil
}
往双向链表中插入元素
void insert(int key){
Node *x = (Node *)malloc(sizeof(Node));
x->key =key;
//在头结点后添加元素
x->next = nil->next;
x->next->prev =x;
nil->next =x;
x->prev =nil;
}
在双向链表中搜索元素
Node* listsearch(int key){
Node *cur=nil->next;//从头结点后面的元素开始访问
while(cur!=nil && cur->key !=key){
cur=cur->next;
}
return cur;
}
从双向链表中删除元素
void deleteNode(nod *t){
if(t==nil)return; //头结点不作处理
t->prev->next = t->next;
t->next->prev = t->prev;
free(t); //释放已不需要的内存空间
}
void deleteKey(int key){
删除搜索到的结点
deleteNode(listsearch(key));
}
void deleteFirst(){
deleteNode(nil->next);
}
void deleteLast(){
deleteNode(nil->prev);
}