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日

悬赏问题

  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程
  • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
  • ¥15 关于smbclient 库的使用
  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启