栈队列链表算法总结

1.队列

struct queue{
int head;
int tail;
int a[1001];
};

2.栈

栈的基本操作:

定义栈:stack<int> S;

入栈(定义栈元素):S.push(i);

出栈(删除栈元素):S.pop();

返回栈顶元素的值:S.top();

判断栈是否为空:S.empty();   //值为0说明不空   值为1说明栈为空

//栈的用法实例
#include<iostream>
#include<stack>
using namespace std;
int main()
{
    stack<int> S;//声明栈S 
    int n,m;
    cin>>n;//入栈的元素个数 
    //入栈  也就是给栈中的元素赋值
    for(int i=0;i<n;i++)
    {
         cin>>m; 
         S.push(m);   //入栈 
      } 
    //出栈   假设元素为偶数则出栈
     while(!S.empty()) //当栈不为空时
    {
        int t=S.top();
        if(t%2==0)  //栈顶元素为偶数则输出 
        {
            cout<<"出栈:"<<S.top()<<endl;
       }
           S.pop();  //出栈 
     } 
     cout<<"此时栈里面元素个数为:"<<S.size()<<endl; 
 } 
 
栈的基本用法

需注意的问题:

我之前想要处理一堆数,遇到偶数就出栈输出,输出栈内部剩余的数

于是我这样做了(有问题代码):

 1 //栈的用法实例
 2 #include<iostream>
 3 #include<stack>
 4 using namespace std;
 5 int main()
 6 {
 7     stack<int> S;//声明栈S 
 8     int n,m;
 9     cin>>n;//入栈的元素个数 
10     //入栈  也就是给栈中的元素赋值
11     for(int i=0;i<n;i++)
12     {
13          cin>>m; 
14          S.push(m);
15       } 
16     //出栈   假设元素为偶数则出栈
17     for(int i=0;i<n;i++) //循环n个元素 
18     {
19         int t=S.top();
20         if(t%2==0)  //栈顶元素   注意:如果元素不为偶数,下面的都不会判断,因为它top指针不会往下面走 
21         {
22             cout<<"出栈:"<<S.top()<<endl;
23             S.pop();  //出栈 
24        }
25      } 
26      cout<<"输出栈内现存元素:"<<endl;
27      //输出栈内现存元素
28      while(S.empty()==0)
29      {
30          cout<<S.top()<<" ";
31          S.pop();
32       } 
33       cout<<endl;
34      cout<<"此时栈里面元素个数为:"<<S.size()<<endl; 
35  } 

输入情况:

5
1 2 3 4 5  

输出情况:

输出栈内现存元素:
5 4 3 2 1
此时栈里面元素个数为:0

我们可以发现一个问题:

它偶数2与4是没有出栈的(未被删除掉),为什么呢???

原因在于:上面5个元素入栈以后,栈顶元素此时为5,t%2!=0,所以不进行if(t%2==0)里面的操作,那么S.pop()就不会进行,top指针就一直不变(尽管for语句一直执行),t一直都等于5,所以也不会进行偶数出栈

解决方法:

如果要删除偶数,而输出奇数时,可以直接在判断偶数时就输出,S.pop()一直需要执行,top指针才会往下。

 1     for(int i=0;i<n;i++) //循环n个元素 
 2     {
 3         int t=S.top();
 4         if(t%2==0)  //栈顶元素   注意:如果元素不为偶数,下面的都不会判断,因为它top指针不会往下面走 
 5         {
 6             cout<<"出栈:"<<S.top()<<endl;
 7        }
 8        else
 9        cout<<"奇数:"<<S.top()<<endl; 
10        S.pop();  //出栈 
11      } 

例题:

 

转载于:https://www.cnblogs.com/Aiahtwo/p/10551141.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值