为什么最后的输出是11111111呀

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

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



int main()
{
   int x[8]= {1,2,3,4,5,6,7,8};
    SeqStack S(x,8);
    S.Output();
    CirLinkQueue 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();
}


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