程序设计竞赛(acm)常用数据结构

一、栈stack 

包含头文件:stack

定义:  stack<int> name;      //int型的

用法:

出栈: name.pop();                //出栈

入栈: name.push(T);          //T为入栈元素

栈顶: name.top()                  //返回栈首

判空: name.empty();                 //若为空返回true

长度: name.size();                //栈的大小

二、队列queue

包含头文件:queue

定义:  queue<int> name;    //int型的

用法:

出队: name.pop();               

入队: name.push(T);            //T为入栈元素

队首: name.front()

判空: name.empty()           //若为空返回true

队尾: name.back()

长度: name.size();

三、优先队列priority_queue

包含头文件:queue

struct node

{

    friend bool operator < (const node a,const node b)

    {

        return a.priority < b. priority;

}

int priority;     //优先级

int value;        //

};

 

定义:  priority_queue<node,vector<node>,cmp> name;

用法:

队首元素:name.top()

其余操作和队列一样

四、堆 heap

包含头文件:algorithm

STL里面的堆操作一般用到的只有4个:make_heap();pop_heap();push_heap();sort_heap();

1make_heap();

函数原型:void make_heap(first_pointer,end_pointer,compare_function);

一个参数是数组或向量的头指针,第二个向量是尾指针。第三个参数是比较函数的名字。在缺省的时候,默认是大跟堆。(下面的参数都一样就不解释了)

作用:把这一段的数组或向量做成一个堆的结构。范围是(first,last)

2pop_heap();

函数原型:void pop_heap(first_pointer,end_pointer,compare_function);

作用:pop_heap()不是真的把最大(最小)的元素从堆中弹出来。而是重新排序堆。它把firstlast交换,然后将[first,last-1)的数据再做成一个堆。

3push_heap();

函数原型:void pushheap(first_pointer,end_pointer,compare_function);

作用:push_heap()假设由[first,last-1)是一个有效的堆,然后,再把堆中的新元素加进来,做成一个堆。

4sort_heap()

函数原型:void sort_heap(first_pointer,end_pointer,compare_function);

作用是sort_heap[first,last)中的序列进行排序。它假设这个序列是有效堆。(当然,经过排序之后就不是一个有效堆了)

 

下面是例子:

五、快速排序sort

包含头文件:algorithm

用法:

sort(a,a+n);           //由小到大

sort(a,a+n,cmp);  //cmp排序的比较函数

qsort( a , SIZE , sizeof(a[0])*SIZE , cmp);

 

cmp写法

1int/char

2double

3char *

 

4、结构体一级排序

5、结构体二级排序

六、稳定快速排序stable_sort

包含头文件:algorithm

用法:

stable_sort (a,a+n);               //由小到大

stable_sort (a,a+n,cmp);      //cmp排序的比较函数

 

七、第K小数nth_element

包含头文件:algorithm

用法:nth_element(c,c+z,c+j);

解释:c开始到c+j的数组中第K小元素,数组cK个即第K小数,c[K-1]即为第K小数,且之前的都比这个数小。

八、KMP算法

KMP算法

  

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值