死宅日志——栈与队列

今天开学搞的我很难受,一堆事忙完后,宿舍还没网。出去租个光猫还被淋了一身雨,回来了发现竟然有伞这就很难受了。没有网无聊的我想学习。。。。这是多么绝望的一句话啊。今天看了下栈与队列。
*栈与队列是最基础的数据结构,先说一下概念吧。
栈:
就是说先进后出后进先出 。就像洗碗,我们洗完碗摞到那就是入栈,把碗放进碗柜就是出栈。栈需要一个计数器或栈顶指针。
以下是代码实现:
int a[1000],count=0;//a为栈 count为计数器
void getin(int x)//入栈 记录入栈元素
{
a[count++]=x;
}
int getin(int x)//出栈 要将出栈的元素输出
{
return a[count–];
}
输入一段数据:1 2 3 4 5 6 7 8
输出可以是
1 2 3 4 5 6 7 8进一个出一个
2 1 3 7 6 5 4 8
8 7 6 5 4 3 2 1全部进栈再出栈

在这里举个例子:
example 1
  一个表达式中包括变量、常量、操作符、圆括号,圆括号可以嵌套, 编写程序判断表达式中的括号是否正确匹配。输入任意一个表达式,判断其中括号是否匹配,匹配, 输出YES, 不匹配,输出NO。
  样例输入1:
  ((a+b)*3-4*((c-d)/7))*e
   
  样例输入2:
  ((a+b)*6)+(c-d)/8)))*e

  样例输出1:
  YES

  样例输出2:
  NO
  
 


    string s;
    char a[1000010];
    cin>>s;
    int count=0;
    for(int
i=0;i<s.length();i++)
    {
if(s[i]=='(')a[++count]=s[i];
        if(s[i]==')')
        {
            count--;
            if(count<0)break;
       }
    }
       if(count!=0)cout
<<"NO"<< endl;

       else cout
<<"YES"<< endl;


 
  example 2
  描述 Description 
栈是常用的一种数据结构,有n个元素在栈顶端一侧等待进栈,栈顶端另一侧是出栈序列。你已经知道栈的操作有两·种:push和pop,前者是将一个元素进栈,后者是将栈顶元素弹出。现在要使用这两种操作,由一个操作序列可以得到一系列的输出序列。请你编程求出对于给定的n,计算并输出由操作数序列1,2,…,n,经过一系列操作可能得到的输出序列总数。
  输入格式 Input Format 
 一个整数n(1<=n<=15) 
 输出格式 Output Format
一个整数,即可能输出序列的总数目。
Sample:
3

5
可以用栈和递归来写,就像一个二叉树一样有俩条路进栈一个新的出栈一个当count==n则++ 并return

队列:
先进先出后进后出。就像我们去食堂买饭人多要排队一样后来的后刷卡后领饭。队列需要一个头指针和一个尾指针分别记录队头和队尾的地址。
以下是代码实现:
int a[1000],count=0;head=1,tail=0;//a为队列 head为队头 tail为队尾
void getin(int x)//入队 记录入队元素
{
count++;
a[head++]=x;
if(head>n)head=1;//为了防止数组太长一旦过长从头开始记录就像一个环
}
int getin(int x)//出队 要将出队的元素输出
{
count–;
return a[tail++];
if(tail>n)tail=1;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值