网站开发适合女生干吗,江西网站建设价格低,wordpress搭建小说站,免费查公司的网站C普通队列
算法竞赛中一般用静态数组来模拟队列#xff0c;或者使用STL queue。使用C的STL queue时#xff0c;由于不用自己管理队列#xff0c;因此代码很简洁。队列的部分操作如下。 C优先队列
很多算法需要用到一种特殊的队列#xff1a;优先队列。它的特点是最优数据…C普通队列
算法竞赛中一般用静态数组来模拟队列或者使用STL queue。使用C的STL queue时由于不用自己管理队列因此代码很简洁。队列的部分操作如下。 C优先队列
很多算法需要用到一种特殊的队列优先队列。它的特点是最优数据始终位于队首。
优先队列的效率很高新数据插入队列生成新的最优队首元素计算复杂度是O(logn)弹出最优的队首元素后在队列中计算出新的最优队首元素计算复杂度也是O(logn)。
C STL优先队列priority_queue用堆来实现堆是用二叉树实现的一种数据结构。
定义priority_queueType, Container, Functional。
Type是数据类型Container是容器类型用数组实现的容器默认是vectorFunctional是比较的方式。当需要使用自定义的数据类型时才需要传入这3个参数而使用基本数据类型时只需要传入数据类型默认是大顶堆堆顶是最大值。 C链表
链表的编程实现有动态链表、静态链表、STL list等多种方法。在算法竞赛中为了加快编程速度一般使用静态链表或STL list。
STL list
如果读者嫌麻烦则可以使用C的STL list这样就不用自己管理链表。非常方便本文也是直接讲解STL list加快在算法竞赛中的编程速度。 STL list是双向链表通过指针访问结点数据它的内存空间可以是不连续的使用它能高效地删除和插入结点。就此意义而言list是真正的链表。 list中的构造函数
list() 声明一个空列表
list(n) 声明一个有n个元素的列表每个元素都是由其默认构造函数T()构造出来的
list(n,val) 声明一个由n个元素的列表每个元素都是由其复制构造函数T(val)得来的
list(first,last) 声明一个列表其元素的初始值来源于由区间所指定的序列中的元素
常用函数
begin()和end()通过调用list容器的成员函数begin()得到一个指向容器起始位置的iterator可以调用list容器的 end() 函数来得到list末端下一位置相当于int a[n]中的第n1个位置a[n]实际上是不存在的不能访问经常作为循环结束判断结束条件使用。
push_back() 和push_front()使用list的成员函数push_back和push_front插入一个元素到list中。其中push_back()从list的末端插入而 push_front()实现的从list的头部插入。
empty()利用empty() 判断list是否为空。
resize() 如果调用resize(n)将list的长度改为只容纳n个元素超出的元素将被删除如果需要扩展那么调用默认构造函数T()将元素加到list末端。如果调用resize(n,val)则扩展元素要调用构造函数T(val)函数进行元素构造其余部分相同。
clear() 清空list中的所有元素。
front()和back() 通过front()可以获得list容器中的头部元素通过back()可以获得list容器的最后一个元素。但是有一点要注意就是list中元素是空的时候这时候调用front()和back()会发生什么呢实际上会发生不能正常读取数据的情况但是这并不报错那我们编程序时就要注意了个人觉得在使用之前最好先调用empty()函数判断list是否为空。
pop_back和pop_front()通过删除最后一个元素通过pop_front()删除第一个元素序列必须不为空如果当list为空的时候调用pop_back()和pop_front()会使程序崩掉。
swap()交换两个链表(两个重载)一个是l1.swap(l2); 另外一个是swap(l1,l2)都可能完成连个链表的交换。
reverse()通过reverse()完成list的逆置。
merge()合并两个链表并使之默认升序(也可改)l1.merge(l2greaterint()); 调用结束后l2变为空l1中元素包含原来l1 和 l2中的元素并且排好序升序。其实默认是升序greaterint()可以省略另外greaterint()是可以变的也可以不按升序排列。
insert()在指定位置插入一个或多个元素(三个重载)
l1.insert(l1.begin(),100); 在l1的开始位置插入100。
l1.insert(l1.begin(),2,200); 在l1的开始位置插入2个100。
l1.insert(l1.begin(),l2.begin(),l2.end());在l1的开始位置插入l2的从开始到结束的所有位置的元素。
erase()删除一个元素或一个区域的元素(两个重载)
l1.erase(l1.begin()); 将l1的第一个元素删除。
l1.erase(l1.begin(),l1.end()); 将l1的从begin()到end()之间的元素删除。