⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cd3_4u.cpp

📁 C++ Builder程序员学习数据结构第3章
💻 CPP
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "cd3_4u.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
#define max 4                      //设置队列存储元素
String queue[max];
int front=0;                       //队列数据前端
int rear=0;                        //队列数据后端
int tpr=0;                         //temporary,暂存数据记数变量
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormPaint(TObject *Sender)  //可在窗体上绘制图案的事件
{
     Canvas->Pen->Color=clBlue;             //设置笔划颜色
     Canvas->Brush->Color=clWhite;          //设置填满颜色
     Canvas->Ellipse(50,50,250,250);        //设置边界(左上与右下端点)绘制一圆形

     Canvas->MoveTo(150,250);               //设置两点绘制线段点:(X,Y)
     Canvas->LineTo(150,50);
     Canvas->MoveTo(50,150);
     Canvas->LineTo(250,150);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::endClick(TObject *Sender)
{
   Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::binClick(TObject *Sender)
{
   int ret;

   if(front!=(rear+1)%max)            //加入数据的限制
   {
      rear=(rear+1)%max;              //加1并取余数,以达到计数循环累加的目的

      queue[rear]=InputBox("队列数据输入框  ","请输入数据     "," ");

      switch(rear)                    //后端计数器显示变化的选择决策
      {
         case 0:
            q0->Caption=queue[0];
            r3->Visible=false;
            r0->Visible=true;
            break;
         case 1:
            q1->Caption=queue[1];
            r0->Visible=false;
            r1->Visible=true;
            break;
         case 2:
            q2->Caption=queue[2];
            r1->Visible=false;
            r2->Visible=true;
            break;
         case 3:
            q3->Caption=queue[3];
            r2->Visible=false;
            r3->Visible=true;
            break;
      }
      emp->Visible=false;                   //有数据加入,队列就不可能为空
      sp->Brush->Color=clMenu;
   }
   else                                     //不能满足加入条件就不能再加入数据
   {
      full->Visible=true;                   //显示数据已满
      sp->Brush->Color=clRed;
      if(front==(rear+1)%max) //设置暂存区,弥补一般环型队列牺牲前端空间的不足
      {
         if(tpr==1)           //如果已有暂存纪录
         {
            ret=Application->MessageBox("您是否要取代暂存数据"
                                        ,"这一笔为暂存数据",308);
            tpr=0;            //决策过后,暂存计数器还原为0
            if(ret==7)        //如果决策返回值为7,表示拒绝取代暂存数据
            goto c;           //跳过暂存数据对话框
         }
         queue[front]=InputBox("前端数据暂存设计","请输入数据  "," ");
         tpr=1;
c:
         switch(front)                    //显示前端暂存数据
         {
            case 0:
               q0->Caption=queue[0];
               break;
            case 1:
               q1->Caption=queue[1];
               break;
            case 2:
               q2->Caption=queue[2];
               break;
            case 3:
               q3->Caption=queue[3];
               break;
         }
      }
   }
}

//---------------------------------------------------------------------------
void __fastcall TForm1::outClick(TObject *Sender)
{
   if(front==rear)                       //当前端与后端位置相同时的显示设置
   {
      sp->Brush->Color=clBlue;
      emp->Visible=true;
      lout->Caption=queue[front];        //取出前端暂存的数据
      queue[front]="";
      q0->Caption="";
      q1->Caption="";
      q2->Caption="";
      q3->Caption="";
   }
   else                                // 位置不同表示还有数据

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -