VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 224|回复: 4

[已解决]实现栈的正序输出的问题

[复制链接]
41_avatar_middle
最佳答案
0 
在线会员 发表于 2020-4-18 15:56:03 | 显示全部楼层 |阅读模式
3驿站币
最佳答案
57_avatar_small
2020-4-18 15:56:04
1.关于栈的一次进栈,我理解感觉有点歧义。一次性进栈还是只进一次栈?然后看了一下是利用已有的操作来对整个栈实现栈元素的正序输出。排除了一次性进栈。那只进一次栈,排除了我使用中间栈的方法。所以采用了递归的方法。代码已经过测试,正确输出
  1. #include <iostream>

  2. #include "LinearStack.h"

  3. using namespace std;

  4. void Print(LinearStack<int> & S)                //栈元素的正序输出
  5. {
  6.         int nValue = 0;
  7.         bool bFlag = S.Pop(nValue);
  8.         if (bFlag)
  9.         {
  10.                 if (!S.IsEmpty())
  11.                 {
  12.                         Print(S);
  13.                 }
  14.                 std::cout << nValue << std::endl;
  15.         }
  16. }

  17. int main()
  18. {
  19.         LinearStack<int> S(10);
  20.         for (int i = 0; i<8; i++)
  21.                 S.Push(2 * i + 1);

  22.         //cout<<"倒序输出栈为:"<<S<<endl;        //测试用
  23.         cout << "正序输出栈:" << endl;
  24.         Print(S);

  25.         return 0;
  26. }
复制代码

最佳答案

查看完整内容

1.关于栈的一次进栈,我理解感觉有点歧义。一次性进栈还是只进一次栈?然后看了一下是利用已有的操作来对整个栈实现栈元素的正序输出。排除了一次性进栈。那只进一次栈,排除了我使用中间栈的方法。所以采用了递归的方法。代码已经过测试,正确输出




上一篇:怎么用c去写屏幕截图。刚开始学编程,c语言结课想做个屏幕截图。
下一篇:c语言循环链表
57_avatar_middle
最佳答案
19 
在线会员 发表于 2020-4-18 15:56:04 | 显示全部楼层    本楼为最佳答案   
bestAnswer
1.关于栈的一次进栈,我理解感觉有点歧义。一次性进栈还是只进一次栈?然后看了一下是利用已有的操作来对整个栈实现栈元素的正序输出。排除了一次性进栈。那只进一次栈,排除了我使用中间栈的方法。所以采用了递归的方法。代码已经过测试,正确输出
  1. #include <iostream>

  2. #include "LinearStack.h"

  3. using namespace std;

  4. void Print(LinearStack<int> & S)                //栈元素的正序输出
  5. {
  6.         int nValue = 0;
  7.         bool bFlag = S.Pop(nValue);
  8.         if (bFlag)
  9.         {
  10.                 if (!S.IsEmpty())
  11.                 {
  12.                         Print(S);
  13.                 }
  14.                 std::cout << nValue << std::endl;
  15.         }
  16. }

  17. int main()
  18. {
  19.         LinearStack<int> S(10);
  20.         for (int i = 0; i<8; i++)
  21.                 S.Push(2 * i + 1);

  22.         //cout<<"倒序输出栈为:"<<S<<endl;        //测试用
  23.         cout << "正序输出栈:" << endl;
  24.         Print(S);

  25.         return 0;
  26. }
复制代码
41_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2020-4-18 15:57:50 | 显示全部楼层
#include <iostream>
using namespace std;
#include "LinearStack.h"

void Print(LinearStack<int> & S)                //栈元素的正序输出
{
       
}

int main()
{
        LinearStack<int> S(10);
        for(int i=0;i<8;i++)
                S.Push(2*i+1);
       
//        cout<<"倒序输出栈为:"<<S<<endl;        //测试用
        cout<<"正序输出栈:"<<endl;
        Print(S);

        return 0;
}
此处为整个cpp的主函数部分,我已经写好了栈的实现。
41_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2020-4-18 16:02:39 | 显示全部楼层
#include <iostream>
using namespace std;
template<class T>
class LinearStack
{
        public:
                LinearStack(int LSMaxSize);                //构造函数,创建空栈
                ~LinearStack();                                        //析构函数,删除栈
                bool IsEmpty();
                                                //判断栈是否为空,空返回true,非空返回false
                bool IsFull();
                                                //判断栈是否为满,满返回true,不满返回false
                int  GetElementNumber(); //求栈中元素的个数
                bool Push(const T& x);
                                                //在栈顶插入元素x,插入成功返回true,不成功返回false
                bool Top(T& x);
                                                //求栈顶元素的值放入x中,成功返回true,失败返回false
                bool Pop(T& x);
                                                //从栈顶删除一个元素,并将该元素的值放入x中
                void OutPut(ostream& out);
                                                // 将顺序栈放到输出流out中输出
        private:
                int top;                //用来表示栈顶
                int MaxSize;        //栈中最多元素个数
                T *element;                //一维动态数组
};
//实现构造函数
template<class T>
LinearStack<T>::LinearStack(int LSMaxSize)
{
        MaxSize=LSMaxSize;
        element=new T[LSMaxSize];
        top=-1;                    
}
//实现析构函数
template<class T>
LinearStack<T>::~LinearStack()
{
        delete []element;
}
//实现判断栈是否为空
template<class T>
bool LinearStack<T>::IsEmpty()
{
        return top==-1;
}
//实现判断栈是否为满
template<class T>
bool LinearStack<T>::IsFull()
{
        return top==MaxSize;
}
//实现求栈中元素的个数
template<class T>
int  LinearStack<T>::GetElementNumber()
{
        return top+1;
}
//实现进栈
template<class T>
bool LinearStack<T>::Push(const T& x)
{
        if (IsFull())
                return false;
        else
        {
                top++;
                element[top]=x;
                return true;
        }
}
//实现求栈顶元素
template<class T>
bool LinearStack<T>::Top(T& x)
{
        if (IsEmpty())
                return false;
        else
        {
                x=element[top];
                return true;
        }
}
//实现出栈
template<class T>
bool LinearStack<T>::Pop(T& x)
{
        if (IsEmpty())
                return false;
        else
        {
                x=element[top];
                top--;
                return true;
        }
}
//实现顺序栈的输出
template<class T>
void LinearStack<T>:: OutPut(ostream& out)
{
        T x;
        while(!IsEmpty())
        {
                Pop(x);
                out<<x;
        }
}
//重载插入运算符<<
template<class T>
ostream& operator<<(ostream& out, LinearStack<T>& x)
{
        x.OutPut(out);
        return out;
}
这里是那个头文件,需要利用已有的操作来对整个栈实现栈元素的正序输出,并编写主函数进行测试。要求若干元素一次入栈,然后执行Print(S);语句,在屏幕上按输入的顺序输出栈中的元素。请问如何去实现一次入栈及其他要求呢?
57_avatar_middle
最佳答案
19 
在线会员 发表于 2020-4-19 12:57:53 | 显示全部楼层
JLDawson 发表于 2020-4-19 12:56
1.关于栈的一次进栈,我理解感觉有点歧义。一次性进栈还是只进一次栈?然后看了一下是利用已有的操作来对整 ...

补充:楼主下次发代码时,点击编辑框工具栏中的“<>”按钮输入代码
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号 )|网站地图wx_jqr

GMT+8, 2020-6-2 10:30

Powered by CcTry.CoM

© 2009-2020 cctry.com

快速回复 返回顶部 返回列表