C++之stack & queue & deque

C++之stack & queue & deque

1 stack

    C++ stack(堆栈)是一个容器的改编,它实现了一个先进后出的数据结构(FILO)

    使用该容器时需要包含头文件#include<stack>

    定义stack对象:

stack<int>s1;
stack<string>s2;
     stack的基本操作有:

    1)入栈:s.push(x);

    2)出栈:s.pop();注意:出栈操作只是删除栈顶的元素,并不返回该元素。

    3)访问栈顶:s.top();

    4)判断栈空:s.empty();当栈空时返回true。

    5)访问栈中的元素个数:s.size();

    举例:

    #include<iostream>    
    #include<stack>    
    using namespace std;    
    int main(void)    
    {    
        stack<double>s;//定义一个栈    
        for(int i=0;i<10;i++)    
            s.push(i);    
        while(!s.empty())    
        {    
            printf("%lf\n",s.top());    
            s.pop();    
        }    
        cout<<"栈内的元素的个数为:"<<s.size()<<endl;    
        return 0;    
    }  

2 queue

    与stack 模板类很相似,queue 模板类也需要两个模板参数,一个是元素类型,一个容器类
型,元素类型是必要的,容器类型是可选的,默认为deque 类型。

    queue 模板类的定义在头文件#include <queue>

    定义queue 对象:

queue<int> q1;
queue<double> q2;

    queue 的基本操作:

    1)入队:q.push(x); 将x 接到队列的末端。

    2)出队:q.pop(); 弹出队列的第一个元素,注意,并不会返回被弹出元素的值。

    3)访问队首元素:q.front(),即最早被压入队列的元素。

    4)访问队尾元素:q.back(),即最后被压入队列的元素。

    5)判断队列空:q.empty(),当队列空时,返回true。

    6)访问队列中的元素个数:q.size()

    举例:

#include <iostream>
#include <queue>

using namespace std;

int main()
{
	int e, n, m;
	queue<int> q1;
	for (int i = 0; i<10; i++)
		q1.push(i);
	if (!q1.empty())
		cout << "dui lie bu kong\n";
	n = q1.size();
	cout << n << endl;
	m = q1.back();
	cout << m << endl;
	for (int j = 0; j<n; j++)
	{
		e = q1.front();
		cout << e << " ";
		q1.pop();
	}
	cout << endl;
	if (q1.empty())
		cout << "dui lie kong\n";
	system("PAUSE");
	return 0;
}

3 deque

    所谓的deque是”double ended queue”的缩写,双端队列不论在尾部或头部插入元素,都十分迅速。而在中间插入元素则会比较费时,因为必须移动中间其他的元素。双端队列是一种随机访问的数据类型,提供了在序列两端快速插入和删除操作的功能,它可以在需要的时候改变自身大小,完成了标准的C++数据结构中队列的所有功能。

    头文件:#include<deque>。

    基本操作:

    1)deque<Type> k;      ------      定义一个deque的变量(定义时已经初始化)      例如: deque<int> k;

    2)k.empty()                  ------      查看是否为空范例,是的话返回1,不是返回0

    3)k.clear()                     ------      清除队列里的所有数据

    4)k.push_front(i)           ------      从已有元素前面增加元素i(队伍大小不预设)

    5)k.push_back(i)           ------      从已有元素后面增加元素i(队伍大小不预设)

   6) k.pop_front()             ------      清除第一个元素

   7) k.pop_back()             ------      清除最后一个元素

    8)k.front()                     ------      显示第一个元素      例如n = k.front();

   9) k.back()      ------      显示最后一个元素

   10) k.size()      ------      输出现有元素的个数

    举例:

    #include<stdio.h>  
    #include<deque>  
    using namespace std;  
    int main(void)  
    {  
        int i;  
        int a[10] = {0,1,2,3,4,5,6,7,8,9};  
        deque<int> q;  
        for(i=0;i<=9;i++)  
        {  
            if(i%2==0)  
                q.push_front(a[i]);  
            else  
                q.push_back(a[i]);  
        }                                  /*此时队列里的内容是: {8,6,4,2,0,1,3,5,7,9}*/  
        q.pop_front();  
        printf("%d\n", q.front());        /*清除第一个元素后输出第一个(6)*/  
        q.pop_back();  
        printf("%d\n", q.back());         /*清除最后一个元素后输出最后一个(7)*/  
        return 0;  
    }  


猜你喜欢

转载自blog.csdn.net/qq_27022241/article/details/80746908
今日推荐