weixin_43306709 2022-03-21 20:43 采纳率: 77.3%
浏览 11
已结题

我想通过队列的方法打印杨辉三角形,但为什么用这种方法显示不了呀

问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图

.h文件

#ifndef QUEUE_H
#define QUEUE_H
#include <iostream>
using namespace std;
template <class T>
class queue
{
private:
    int size;
    int maxSize;
    int front, rear;
    T *element;

public:
    queue(int mmaxsize);
    ~queue();
    bool isempty();
    bool isfull();
    bool insert(const T &x);
    bool Delete(T &x);
    void display();
    bool getElement(T &x);
    void output(ostream& out);
};
//构造函数
template <class T>
queue<T>::queue(int mmaxsize)
{
    size = 0;
    maxSize = mmaxsize;
    front = 0;
    rear = 0;
    element = new T[mmaxsize];
}
//析构函数
template <class T>
queue<T>::~queue()
{
    delete[] element;
}
//判断是不是空
template <class T>
bool queue<T>::isempty()
{
    return size == 0;
}
//判断是不是满
template <class T>
bool queue<T>::isfull()
{
    return size = maxSize;
}
//实现入队
template <class T>
bool queue<T>::insert(const T &x)
{
    if (isfull())
        return false;
    else
    {
        element[rear] = x;
        rear = (rear + 1) % maxSize;
        size++;
        return true;
    }
}
//实现出队
template <class T>
bool queue<T>::Delete(T &x)
{
    if (isempty())
        return false;
    else
    {
        x = element[front];
        front = (front + 1) % (maxSize);
        size--;
        return true;
    }
}
//寻找队列里面的头元素
template <class T>
bool queue<T>::getElement(T& x)
{
    if(isempty())
        return false;
    else
    {
        x = element[front];
        return true;
    }
}
//实现队列的输出
template <class T>
void queue<T>::output(ostream& out)
{
    int index;
    index = front;
    for(int i = 0;i<size;i++)
    {
        out << element[index] << endl;
        index = (index+1)%maxSize;
    }
}
//重载插入运算符
template <class T>
ostream& operator<<(ostream& out,queue<T>& x)
{
    x.output(out);
}
#endif

.cpp

#include <iostream>
#include "queue.h"

using namespace std;
void printspace(int n, int k);
void yanghui(int n);

int main()
{
    yanghui(4);
    return 0;
}
void printspace(int m, int k)
{
    for (int i = 0; i < m-k; i++)
        cout << ' ';
}
void yanghui(int n)
{
    queue<int> Q(n + 2);
    int x, y;
    printspace(n, 1);
    cout << '1' << endl;
    Q.insert(0);
    Q.insert(1);
    Q.insert(1);
    for (int j = 2; j <= n; j++)
    {
        Q.insert(0);
        printspace(n, j);
        do
        {
            Q.Delete(x);
            Q.getElement(y);
            if(y) 
                cout << y << ' ';
            else 
                cout << endl;
            Q.insert(x+y);
        }while(y);
    }

    cout << endl;
}

运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果
  • 写回答

1条回答 默认 最新

  • 下坠丷 2022-03-22 07:54
    关注

    判断队列是不是满那里错了,应该是size==maxsize。你这个队列一直判满,插不进元素

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

报告相同问题?

问题事件

  • 系统已结题 3月30日
  • 已采纳回答 3月22日
  • 创建了问题 3月21日

悬赏问题

  • ¥35 平滑拟合曲线该如何生成
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了
  • ¥15 链式存储应该如何解决
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站