南邮算法程序设计

算法实验设计抽到的几道题,运气很好,抽到的题很简答,所以两周的算法实验一天就写完了,Qt5可视化也就写了一天,相当于放了两周假。。。。23333333333

【注:开发环境均为Qt5 + c++,下面仅提供算法实现的核心代码,附加功能请自行添加】

一,报数问题 【循环队列】

【课题内容】 设有 N个人站成一排,从左到右的编号分别是 1-N,现从左到右报数“ 1,2,1, 2”,数到 1的人出列,数到 2的人站在队伍的最右端。报数过程反复进行,直到 N个 人都出列为止。要求给出他们的出列顺序。


```cpp
定义类:
namespace Ui {
   
class MainWindow;
}
class MainWindow : public QMainWindow{
   
    typedef struct     // 循环队列结构体定义
    {
   
        int front;
        int rear;
        ElemType * element;
    } Queue;
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
    void create (Queue * Q,int mSize)   //创建一个能够容纳mSize个单元的空队列
    {
   
        Q->element=(ElemType*)malloc(sizeof(ElemType)*mSize);
        Q->front=0;
        Q->rear=0;
    }

    BOOL Front(Queue Q,ElemType *x,int mSize)   //获取队头元素,通过x返回
    {
   
        if(Q.rear == Q.front)
        {
   
            return FALSE;
        }
        *x=Q.element[Q.front];
        return TRUE;
    }
    void EnQueue(Queue *Q,ElemType x,int mSize)  //在队列后面的队尾插入元素x
    {
   
        Q->element[Q->rear] =x ;
        Q->rear=(Q->rear+1)%mSize;
    }

    void DeQueue(Queue *Q,int mSize)   //从队列中删除队头元素
    {
   
        if(Q->front == Q->rear)
        {
   
        }
        Q->front=(Q->front+1)%mSize;
     }

private slots:
    void on_pushButton_clicked();
    void on_pushButton_2_clicked();

private:
    Ui::MainWindow *ui;
    QLineEdit *lineinput;
    QPushButton *pushButton;
    QTextEdit *lineoutput;
};
主要代码:
void MainWindow::on_pushButton_clicked()
{
   
    QString str = ui->lineinput->text();
        int num = str.toInt();

        Queue Q;
        int mSize;
        int FLAG =1;
        int pout = 0;
        int nin =0;
        QString out;
        mSize = num +1 ;
        create (&Q,mSize);
        int i;
        for(i=0;i<num;i++)     //生成 1到mSize的队伍
        {
   
            Q.element[Q.rear] =i+1 ;
            Q.rear=(Q.rear+1)%mSize;
        }

        while(Q.front != Q.rear)
        {
   
            if(FLAG%2 ==1)                     //报数为1的人出列
            {
   
                Front(Q,&pout,mSize);
                QString out = QString::number(pout);
                ui->lineoutput->append(out);
                DeQueue(&Q
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值