STL之二:栈和stack

栈是基本的数据结构之一,特点是“先进后出”。

头文件:#include<stack>

下面列举一些栈的有关操作:

stack<Type> s;  //定义栈,Type为数据类型
s.push(item);  //把item放进栈顶
s.top();  //返回栈顶的元素,但不会删除
s.pop();  //删除栈顶的元素,但不会返回,在出栈的时候要进行两部操作
		  //即先top()获得栈顶元素,再pop()删除栈顶元素
s.size();  //返回栈中元素的个数
s.empty();  //检查栈是否为空,空返回true,反之为false 

下面列一个练习栈的例题(hdu 1062):

Problem Description

Ignatius likes to write words in reverse way. Given a single line of text which is written by Ignatius, you should reverse all the words and then output them.

Input

The input contains several test cases. The first line of the input is a single integer T which is the number of test cases. T test cases follow.
Each test case contains a single line with several words. There will be at most 1000 characters in a line.

Output

For each test case, you should output the text which is processed.

Sample Input

3

olleh !dlrow

m'I morf .udh

I ekil .mca

Sample Output

hello world!

I'm from hdu.

I like acm.

题目大意:翻转字符串,可以用栈模拟。

代码如下:

#include<bits/stdc++.h>
using namespace std;
int main(){
	int n;
	char ch;
	cin>>n;
	getchar();  //消除第一行输出后的回车 
	while(n--){
		stack<char> s;   //定义char类型的栈s 
		while(true){ 
			ch=getchar();   //每次输入一个字符 
			if(ch!=' '&&ch!='\n') s.push(ch);   //如果不是空格与回车,就压入栈内 
			if(ch==' '||ch=='\n'||ch==EOF){    //每到空格或者回车,就进行一次出栈输出 
				while(!s.empty()){    //如果栈非空 
					cout<<s.top();		//输出栈顶 
					s.pop();		//删除栈顶 
				}
				if(ch=='\n'||ch==EOF) break;   //判断回车的时候就跳出循环 
				cout<<" ";  
			}
		}
		cout<<endl;
	}
	return 0;
} 

还是要注意爆栈处理,栈需要用空间存储,如果太大,会造成栈溢出(爆栈)。栈的大小是2MB,而申请堆空间的大小一般小于2GB,但LIUNUX默认栈空间大小为 8MB。

由于内存的读取速度比硬盘快,当程序遇到大规模的频繁存取时,开辟内存空间很有作用。

栈的速度快,但是空间小,不灵活。堆是向高地址扩展的数据结构,是不连续的内存区域。

这是由于系统是用链表来存储空闲内存地址的,自然是不连续的,而链表的遍历方向是由低地址向高地址的,而堆的大小受限于计算机系统中有效的虚拟内存,所以堆获得的空间比较灵活,也比较大,但是速度相对慢些。

一般情况下,可以通过以下两种方法更改栈的大小:

(1)在程序中调大系统的栈,这种方法依赖于系统和编译器;

(2)手工写栈。

一天进步一点点,嘤嘤嘤。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值