stack ,栈(堆栈),是一种先进后出(First In Last Out,FILO)的数据结构,先插入的数据在栈底,后放入的数据在栈顶,所有的数据只能从栈顶取出。
在生活中先进后出的例子友很多,例如我们在桌子上摞书,先放的在最下面,后放的在最上面。在取书的时候也是先取最后放的,最才能取到第一个放的。
在栈容器中,只有栈顶数据才可以被外界访问,因此stack不存在遍历。
先进后出(后进先出) --类似与往袋子中装东西,先放进去的在最下面,最后放进行的可以先拿出来;第一个放进去的 --->栈底
最后一个放进的 --->栈顶
stack只允许从栈顶取数据
stack容器无法对数据进行排序sort,但可以判断容器是否为空empty,可以计算元素的个数size;
stack构造函数:
stack< T > stk; //默认构造
stack(const stack &p);//拷贝构造
stack赋值
operator=() --运算符号重载
stack入栈与出栈:
push() -- >入栈
emplace() -- >入栈(在容器尾部插入元素)
pop() --- >出栈
top() -- >查看栈顶元素
empty() -- >判断容器是否为空
size() -- >获取元素个数
swap -- >交换元素
使用示例:
#include < iostream >
#include < stack >
using namespace std;
void test()
{
//创建一个stack容器
stack< int > stk;
//入栈
stk.push(10);
stk.push(20);
stk.push(30);
stk.push(40);
stk.emplace(100);
stack< int >stk3(stk);//拷贝构造
cout < < "stk元素个数:" < < stk.size() < < endl;
//查看stk元素
while (!stk.empty())
{
cout < < stk.top() < < " ";//查看栈顶元素
stk.pop();//出栈
}
cout < < endl;
stack< int >stk2 = stk;//赋值
if (stk2.empty())
{
cout < < "stk2为空" < < endl;
}
//入栈
stk2.push(111);
stk2.push(222);
stk2.swap(stk3);
//查看stk2元素
cout < < "skt2栈内容:" < < endl;
while (!stk2.empty())
{
cout < < stk2.top() < < " ";//查看栈顶元素
stk2.pop();//出栈
}
cout < < endl;
//查看stk3元素
cout < < "skt3栈内容:" < < endl;
while (!stk3.empty())
{
cout < < stk3.top() < < " ";//查看栈顶元素
stk3.pop();//出栈
}
cout < < endl;
}
int main()
{
test();
system("pause");
}
队列(queue) 和堆栈相似,是一种可以存取的数据结构,不同的是队列的存取是在两个不同的方向进行的,因此其主要特征是先进先出(First-in-first-out,FIFO),类似于我们生活中的水管。
队列只需要从对尾插入数据(入队,push_back),对头取数据(出队,pop_front);
队列只能访问对头和队尾数据,其他数据需要出队才能访问,所以不存在遍历队列;
返回队列头数据:front()
返回队列尾数据:back()
队列构造函数:
queue< T > que; //队列通过类模板实现,默认构造函数
queue(const queue &p);
operator=(queue &p) -- >运算符重载
相关成功函数:
入队:push()
出队:pop()
获取队列头数据:front();
获取队列尾数据:back();
判断队列是否为空:empty();
获取队列中元素个数:size();
互换元素:swap();
使用示例:
#include < iostream >
#include < queue >
using namespace std;
void test()
{
queue< int > q;
//入队
q.push(10);
q.push(20);
q.push(30);
q.emplace(40);//从队列尾插入数据
cout < < "队列中成员个数:" < < q.size() < < endl;
while (!q.empty())//判断队列是否为空
{
cout < < "队列头:" < < q.front() < < "t队列尾:" < < q.back() < < endl;
q.pop();//出队
}
cout < < "队列中成员个数:" < < q.size() < < endl;
}
int main()
{
test();
system("pause");
}
全部0条评论
快来发表一下你的评论吧 !