码迷,mamicode.com
首页 > 其他好文 > 详细

160508

时间:2016-05-13 01:58:39      阅读:242      评论:0      收藏:0      [点我收藏+]

标签:

栈和队列

基本操作

#include <iostream>  
#include <stack>  
using namespace std;  
int main()  
{  
    stack <int> s;//定义栈  
    s.push(5);//压栈  
    s.push(6);  
    s.push(7);  
s.pop(); //出栈  
printf(“栈顶元素:%d\n”,s.top());

    return 0;  
}    

队列

头文件:

#include <queue>
using namespace std;

声明方法:

1、普通声明

queue<int>q;

2、结构体

struct node{
        int x, y;
    };
   queue<node>q;
  Stl队列的基本操作:

q.push(x) 将x压入队列的末端
q.pop() 弹出队列的第一个元素(队顶元素),注意此函数并不返回任何值
q.front() 返回第一个元素(队顶元素)
q.back() 返回最后被压入的元素(队尾元素)
q.empty() 当队列为空时,返回true
q.size() 返回队列的长度

题目

codevs2058 括号序列

定义满足以下规则字符串为规则序列,否则不是规则序列:
1.空序列是规则序列;
2.如果S是规则序列,那么(S),[S],{S}和< s>也是规则序列;
3.如果A和B都是规则序列,那么AB也是规则序列。
例如,下面的字符串都是规则序列:
(),[],(()),([]),()[],()[()],{{}}<>,([]<>{{}}),<<{}>>
而以下几个则不是:
(,[,],)(,()),([(),<<,{(}),<{}>)
现在,给你一些由”(“、”)”、”[“、”]”、”{“、”}”、”<”、”>”构成的字符串,请判断该字符串是否为规则序列。

输入描述 Input Description

第一行:一个正整数N,表示测试数据组数;
接下来N行:每行一个括号序列(长度不超过L)。

输出描述 Output Description

共N行:对于每一个括号序列,判断其是否规则。
规则输出TRUE,否则输出FALSE。

样例输入 Sample Input

2
{()}<<>>

{{{{{}}}}

样例输出 Sample Output

TRUE
FALSE

数据范围及提示 Data Size & Hint

对于40%数据,有N=1,0

题目分析:

如果遇到左括号,入栈,如果遇到右括号,与栈顶元素比较,如果配对,栈顶元素出栈,否则失配,输出flase;
判断完成后,如果栈空正确,否则false;

代码

#include<iostream>
#include<stack>
#include<cstring>
#include<cstdio>

using namespace std;

char str[2000001];

int main(){
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        stack<char>s;//定义为局部变量,每次执行函数重新定义,避免了清空 
        bool flag=1;
        scanf("%s",str);//cin>>str;
        int l;
        l=strlen(str);//l=str.length();
        for(int j=0;j<l;j++){
            switch(str[j]){
                case ‘)‘:if(!s.empty()&&s.top()==‘(‘) s.pop();else flag=0;break;//注意先判断栈是否为空再取栈顶(弹栈)!!!
                case ‘>‘:if(!s.empty()&&s.top()==‘<‘) s.pop();else flag=0;break;
                case ‘}‘:if(!s.empty()&&s.top()==‘{‘) s.pop();else flag=0;break;
                case ‘]‘:if(!s.empty()&&s.top()==‘[‘) s.pop();else flag=0;break;
                default :s.push(str[j]);break;
            }
        }
    if(flag&&s.empty())cout<<"TRUE"<<endl;else cout<<"FALSE"<<endl;////s.empty条件 注意输出格式大小写!!! 
    }
return 0;   
}

poj3629 Card Stacking

题目描述

贝斯和奶牛们共n个队员玩k张牌,分牌时候,每轮先分给奶牛,再分给贝斯,每次将最前面的一张牌分给队员,再将这张牌后的p张牌按顺序放在最后。要求给出分完所有牌后贝斯的牌(按照从小到大排好序)。

输入

1行,n,k,p

输出

贝斯的牌(用回车分隔)

样例输入

3 9 2

样例输出

3
7
8

题目分析:

队列模拟

代码

#include<iostream>
#include<queue>
#include<algorithm>
using namespace std;

int q[100005],head=0,tail=0;

int main(){
    int n,m,p; 
    cin>>n>>m>>p;
    for(int i=1;i<=m;i++){
        q[tail]=i;tail++;
    }
    int f=0;
    int bs[m/n+1],l=0;
    while(head!=tail){
        f++;f%=n;
        if(!f)bs[++l]=q[head];
        head++;head%=100003;
        for(int i=1;i<=p;i++){
            q[tail]=q[head];tail++;tail%=100003;head++;head%=100003;    
        }
    }
    sort(bs,bs+l);
    for(int i=1;i<=l;i++)cout<<bs[i]<<endl;
} 

160508

标签:

原文地址:http://blog.csdn.net/qq985141168/article/details/51346314

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!