stack

stack

栈是一类基础数据结构,在操作栈中的数据时,我们只能在其中一个特定端点上进行操作,这也决定和保持了栈的先进后出的原则,利用这个特殊性质,栈可以轻松解决其他数据结构很难解决的问题(例如全排列问题)
作为stl库中最基础的数据结构之一,stack是最简单的一个,但是它的先进先出的特性又让它的用途在某些特殊问题上非常的广泛,是初学者必须掌握的数据结构之一。

个人认为stack的实现非常简单,在如果在实际操作中调用栈实现的功能并不复杂或是调用次数较少时。没有太大必要使用stl中的《stack》,可能反而还会增加一些不必要的代码量,降低运行效率。

stl中的栈

#include头文件,STL中的很有用的容器适配器之一,默认基于Deque容器实现,可以在定义时覆盖其默认容器类型,但一般并不需要。
包含以下几个成员函数:
empty() 堆栈为空则返回真
pop() 移除栈顶元素(不会返回栈顶元素的值)
push() 在栈顶增加元素
size() 返回栈中元素数目
top() 返回栈顶元素

#include  
#include  
using namespace std; 
  
void showstack(stack <int> s) 
{ 
    while (!s.empty()) 
    { 
        cout << '\t' << s.top(); 
        s.pop(); 
    } 
    cout << '\n'; 
} 
  
int main () 
{ 
    stack <int> s; 
    s.push(10); 
    s.push(30); 
    s.push(20); 
    s.push(5); 
    s.push(1); 
  
    cout << "The stack is : "; 
    showstack(s); 
  
    cout << "\ns.size() : " << s.size(); 
    cout << "\ns.top() : " << s.top(); 
  
  
    cout << "\ns.pop() : "; 
    s.pop(); 
    showstack(s); 
  
    return 0; 
} 

输出:

The stack is : 1 5 20 30 10

s.size() : 5
s.top() : 1
s.pop() : 5 20 30 10

自己使用数组实现一个简易的栈

#include
#include
using namespace std;


struct Stack{
	int data[100];
	int top=0;
};
void s_push(int x,Stack a)
{
		a.data[++a.top]=x;
}

void s_pop(Stack a)	
{
	if(top>0)
	a.top--;
}		

void s_top(Stack a)
{
	if(top>0)
		return a.data[a.top];
	else
		exit(1);	
}	

关于栈的基本知识就讲完了,对于栈的深度理解还需要在实战中进行。

洛谷p1044 栈

p1155双栈排序

题解-双栈排序









下面借用一下csdn的图床
stack_第1张图片

你可能感兴趣的:(stl)