堆栈stack的基本操作

/*栈的模板可以用数组,单链表,以及stack堆栈来实现 */
/*建议电脑查看*/ 
#include <cstdio> 
#include <stack> /*堆栈*/
using namespace std;
void print( stack<int> a, int n );
void clear( stack<int> b );	/*清空*/ 
int main() 
{
	stack<int> s;	 /*定义一个堆栈类型变量*/ 
	int number;
	int out[5] = { 2,3,5,4,1, }; 
	int index = 0;
	int i, j, k, n;
	
	/* 输入 1 2 3 4 5 判断有没有可能输出是 2 3 5 4 1 */ 
	scanf("%d", &n );	//下一行输入n个元素
	for( i=0; i<n; i++ ){
		scanf("%d", &number );
		s.push( number ); 	//将输入的数压入栈顶 
		if( s.top() == out[index] ){	//判断栈顶元素是否与将要输出的元素是否相等 
			while( 1 ){		//加一层循环 
				printf("%d ", s.top() );	//输出栈顶元素 
				s.pop();	//弹出栈顶元素 
				index ++;	//数组下标加一,指向下一个将要输出的元素 
				/*判断数组是否越界以及栈顶元素是否等于将要输出的元素*/ 
				if( index>=5 || s.top() != out[index] )	 
					break;	//不等则终止循环 
			}
		}
	}
	printf("\n");
	if( s.empty() )	//判断堆栈是否为空 
		printf("Yes\n");
	else{
		clear( s ); //清空 
		printf("No\n");
	}

	for( i=0; i<6; i++ )
		s.push( i ); 
	print( s, s.size() );	//遍历输出,自栈顶向下 
	//printf("\n");
	printf("%d\n", s.size() );	//返回并输出元素个数 
	
	return 0;
}

void print( stack<int> a, int n )	//不会改变主函数的堆栈 
{
	int i;
	
	for( i=0; i<n; i++ ){
		printf("%d ", a.top() );
		a.pop();
	}
	printf("\n");
}

void clear( stack<int> b )
{
	while( b.size() )
		b.pop();
}

 

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值