趣味数据结构之——栈
想象一下栈是一个不透明的水桶,栈中的元素就是栈中的水。
然而,我们只能真实地看到桶最上层的水,也就是栈顶元素。也就是说其余对我们来说都是不可见的不可知的。
那么我们能够对栈这个数据结构有什么样的操作呢,或者说应该抱有什么样的期望呢?❐‿❑
首先,就是取元素,显然我们只能取最上层的元素,同理也只能查找(看到)栈顶的元素,还有存入元素和删除元素。(因为上面说过,其余的对我们来说都是不可见的,一定要牢记这一点,因为这个是我们故事的核心)◔̯◔
#include <unordered_map>// 初始化一个空的整型栈 s
stack<int> s;
// 向栈顶添加元素
s.push(10);
s.push(20);
s.push(30);// 获取栈顶元素,输出:30
cout << s.top() << endl;
// 删除栈顶元素
s.pop();
// 输出新的栈顶元素:20
cout << s.top() << endl;
//pop是取,top是看。
正可谓只要了两点还能知道什么???当然是两点确定一条直线啦!!!
于是栈长(栈的大小)我们就知道了,还有栈是不是空的。
// 检查栈是否为空,输出:false
cout << s.empty() << endl;// 获取栈的大小,输出:3
cout << s.size() << endl;
至此,我们这个故事就讲完啦。
一个关于水桶的故事,一个只能看到两个点的故事。
所以我们梳理总结一下栈都可以干什么:
可以看两个点,于是也就可以知其大小,可以观其栈顶元素,可观即可操作,增删查改,后进先出。
一切的一切皆因这两个点而起,So,我们定义(或者说初始化)和使用的时候,只需要定义和理会这两个点就好了——栈底和栈顶。
(甚至可以说只理会一个点就可以了,因为栈底,它就在那,它永远在那儿,直至(整个栈)世间所有全部消亡……)◉_◉