粥粥528 2022-10-09 17:03 采纳率: 84%
浏览 26
已结题

为什么最后的输出是11111111呀

设顺序栈S中有2n个元素,从栈顶到栈底的元素依次为a2n,a2n-1,…,a1,要求通过一个循环队列重新排列栈中元素,使得从栈顶到栈底的元素依次为a2n,a2n-2,…,a2,a2n-1,a2n-3,…,a1,设计算法实现,空闲和时间复杂度均为O(n)。

#include <iostream>
using namespace std;
const int Size=100;
template<typename T>
class Node
{
public:
    T data;
    Node* next;
};
template<typename T>
class SeqStack
{
   public:
       SeqStack(T a[],int l)
       {
           top=-1;
           if(l>Size||l<0) throw "error";
           for(int i=0;i<l;i++)
           {
               data[++top]=a[i];
           }
       }
       T pop()
       {
           if(top==-1)throw "error";
           return data[top--];
       }
       void push(T x)
       {
           if(top==Size) throw"error";
           data[++top]=x;
       }
       void Output()
       {
           if(top==-1)throw "error";
           for(int i=top;i>=0;i--)
           {
               cout<<data[i]<<" ";
            }
            cout<<endl;
       }
   private:
    T data[Size];
    int top;
};
template<typename T>
class CirLinkQueue
{
public:
    CirLinkQueue(){length=0;}
    void Enqueue(T x)
    {
        Node<T>* p=new Node<T>;
        p->data=x;
        if(length==0)
        {
            front=new Node<T>;
            rear=front=p;
            rear->next=front;
            front->next=rear;
        }
        else
        {
            rear->next=p;
            rear=p;
            p->next=front;
            length++;
        }
    }
    T DeQueue()
    {
        Node<T>* p=front;
        int x=p->data;
        rear->next=front->next;
        front=front->next;
        delete p;
        length--;
        return x;
    }
private:
    Node<T>* front,* rear;
    int length;
};



int main()
{
   int x[8]= {1,2,3,4,5,6,7,8};
    SeqStack<int> S(x,8);
    S.Output();
    CirLinkQueue<int> b;
    for(int i=0;i<8;i++)
    {
        b.Enqueue(S.pop());
    }
    for(int i=0;i<8;i++)
    {
        if(i%2==0)
        {
            b.Enqueue(b.DeQueue());
        }
        else
            S.push(b.DeQueue());
    }
    for(int i=0;i<4;i++)
    {
        b.Enqueue(S.pop());
    }
    for(int i=0;i<4;i++)
    {
        S.push(b.DeQueue());
    }
    for(int i=0;i<4;i++)
    {
        b.Enqueue(S.pop());
    }
    for(int i=0;i<8;i++)
    {
        S.push(b.DeQueue());
    }
    S.Output();
}


  • 写回答

1条回答 默认 最新

  • 於黾 2022-10-09 17:24
    关注

    front=new Node<T>;
    rear=front=p;
    那你这front不白new了吗
    在写了那么一大堆代码之前,你应该先测试自己的数据结构是能push,能pop,能Enqueue,能DeQueue的,如果这些基本的操作都出问题,那后面都是执行了个寂寞
    你在if(i%2==0)这一步把数据分成两半,s和b各存一半,为什么最后一个循环是循环8次,DeQueue的时候根本没判断length是不是0,你到底弹出了个什么数据呀

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月8日
  • 已采纳回答 11月30日
  • 创建了问题 10月9日

悬赏问题

  • ¥30 STM32 INMP441无法读取数据
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境