采用链队设计一个算法,反应病人看病、排队看医生的情况,在病人排队过程当中,主要重复两件事情:

采用链队设计一个算法,反应病人看病、排队看医生的情况,在病人排队过程当中,主要重复两件事情:,第1张

#include<stdioh>

#include<malloch>

typedef struct qnode{

int data;

struct qnode next;

}QNode; //链队结点类型

typedef struct {

QNode front,rear;

}QuType; //链队类型

void SeeDoctor(){ //模拟病人看病的过程

int sel,flag=1,find,no;

QuType qu;

QNode p;

qu=(QuType )malloc(sizeof(QuType)); //创建空队

qu->front=qu->rear=NULL;

while(flag==1){ //循环执行

printf("1:排队 2:就诊 3:查看排队 4:不再排队,余下依次就诊 5:下班 请选择:");

scanf("%d",&sel);

switch(sel){

case 1:printf(" >>输入病历号:");

do{

scanf("%d",&no);

find=0;

p=qu->front;

while(p!=NULL && !find)

if(p->data==no)

find=1;

else

p=p->next;

if(find)

printf(" >> 输入的病历号重复,重新输入:");

}while(find==1);

p=(QNode )malloc(sizeof(QNode)); //创建结点

p->data=no;

p->next=NULL;

if(qu->rear==NULL) //第一个病人排队

qu->front=qu->rear=p;

else{

qu->rear->next=p;

qu->rear=p; //将p结点入队

}

break;

case 2:if(qu->front==NULL) //队空

printf(" >>没有排队的病人!\n");

else{ //队不空

p=qu->front;

printf(" >>病人%d就诊\n",p->data);

if(qu->rear==p) //只有一个病人排队的情况

qu->front=qu->rear=NULL;

else

qu->front=p->next;

free(p);

}

break;

case 3:if(qu->front == NULL) //队空

printf(" >>没有排队的病人!\n");

else{

p=qu->front;

printf(" >>排队病人:");

while(p!=NULL){

printf("%d",p->data);

p=p->next;

}

printf("\n");

}

break;

case 4:if(qu->front==NULL) //队空

printf(" >>没有排队的病人!\n");

else{

p=qu->front;

printf(" >>病人按以下顺序就诊:");

while(p!=NULL){

printf("%d",p->data);

p=p->next;

}

printf("\n");

}

flag=0; //退出

break;

case 5:if(qu->front!=NULL) //队不空

printf(" >>请排队的病人明天就医!\n");

flag=0;

break;

}

}

}

int main(){

SeeDoctor();

return 0;

}

时钟不会造成混乱啊

子程序 _选择框1_被单击

如果 (时钟1时钟周期 = 570) '延迟 (50)+延迟 (500)=550,为防止出错再+20=570

时钟1时钟周期 = 0

否则

时钟1时钟周期 = 570

就是这样

import javaawtColor;

import javaawteventActionEvent;

import javaawteventActionListener;

import javaawteventWindowAdapter;

import javaawteventWindowEvent;

import javaxswingButtonGroup;

import javaxswingJButton;

import javaxswingJFrame;

import javaxswingJLabel;

import javaxswingJPanel;

import javaxswingJTextField;

public class BankWaiting extends JFrame implements ActionListener {

int total = 0, now = 0;

boolean is1Ready = false, is2Ready = false, is3Ready = false;

int call1, call2, call3;

JFrame jf;

JLabel jr, jl, jl1, j2, jl2, j3, jl3;

JTextField jr4;

JButton jb, jb1, jb2, j1;

JButton workBut1, workBut2, workBut3;

JPanel jp, jp1, jp2;

public BankWaiting() {

setLayout(null);

jf = new JFrame("银行叫号程序");// 窗体

jr = new JLabel("请号到号窗口办理业务");

jrsetBounds(300, 10, 800, 50);

jrsetForeground(Colorred);

j1 = new JButton("取号");

j1addActionListener(this);

jr4 = new JTextField("欢迎");

jr4setEditable(false);

ButtonGroup bg = new ButtonGroup();

bgadd(j1);

jp = new JPanel();

jl = new JLabel("一号窗口");

jl1 = new JLabel("一号窗口,欢迎你!");

jb = new JButton("下一位");

workBut1 = new JButton("开始办理");

workBut1addActionListener(this);

jbaddActionListener(this);

jpsetBackground(Colorpink);

jpsetSize(200, 80);// 大小

jpsetLocation(20, 120); // 位置

jfsetLayout(null);

jp1 = new JPanel();

j2 = new JLabel("二号窗口");

jl2 = new JLabel("二号窗口,欢迎你!");

jb1 = new JButton("下一位");

workBut2 = new JButton("开始办理");

jb1addActionListener(this);

workBut2addActionListener(this);

jp1setBackground(Colorpink);

jp1setSize(200, 80);// 大小

jp1setLocation(250, 120); // 位置

jfsetLayout(null);

jp2 = new JPanel();

j3 = new JLabel("三号窗口");

jl3 = new JLabel("三号窗口,欢迎你!");

jb2 = new JButton("下一位");

workBut3 = new JButton("开始办理");

workBut3addActionListener(this);

jb2addActionListener(this);

jp2setBackground(Colorpink);

jp2setSize(200, 80);// 大小

jp2setLocation(500, 120); // 位置

jfsetLayout(null);

jfadd(jp);

jfadd(jp1);

jfadd(jp2);

jfadd(jr);

jpadd(jl);

jpadd(jl1);

jpadd(jb);

jpadd(workBut1);

jp1add(j2);

jp1add(jl2);

jp1add(jb1);

jp1add(workBut2);

jp2add(j3);

jp2add(jl3);

jp2add(jb2);

jp2add(workBut3);

jfadd(j1);

jfadd(jr4);

j1setBounds(550, 300, 60, 30);

jr4setBounds(300, 300, 200, 40);

jfsetSize(800, 600);

jfsetVisible(true);

jfaddWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent e) {

Systemexit(0);

}

});

}

public void actionPerformed(ActionEvent e) {

String s = "";

if (egetSource() == j1) {

s = "第" + (++total) + "号,前面还有" + (total - now - 1) + "位顾客!";

jr4setText(s);

}

if (egetSource() == jb) {

if (thishasCustomers()) {

s = "请" + (++now) + "号顾客到一号窗口办理";

call1 = now;

jl1setText(s);

jrsetText(s);

is1Ready = true;

} else {

s = "当前已经没有顾客了";

jl1setText(s);

is1Ready = false;

}

} else if (egetSource() == jb1) {

if (thishasCustomers()) {

s = "请" + (++now) + "号顾客到二号窗口办理";

call2 = now;

jl2setText(s);

jrsetText(s);

is2Ready = true;

} else {

s = "当前已经没有顾客了";

jl2setText(s);

is2Ready = false;

}

} else if (egetSource() == jb2) {

if (thishasCustomers()) {

s = "请" + (++now) + "号顾客到三号窗口办理";

call3 = now;

jl3setText(s);

jrsetText(s);

is3Ready = true;

} else {

s = "当前已经没有顾客了";

jl3setText(s);

is3Ready = false;

}

}

if (egetSource() == workBut1) {

if (is1Ready) {

s = call1 + "号顾客正在办理业务。。。";

jl1setText(s);

is1Ready = false;

}

} else if (egetSource() == workBut2) {

if (is2Ready) {

s = call2 + "号顾客正在办理业务。。。";

jl2setText(s);

is2Ready = false;

}

} else if (egetSource() == workBut3) {

if (is3Ready) {

s = call3 + "号顾客正在办理业务。。。";

jl3setText(s);

is3Ready = false;

}

}

}

public boolean hasCustomers() {

if (now < total) {

return true;

} else {

return false;

}

}

public static void main(String[] args) {

new BankWaiting();

}

}

代码: #include"stdioh"

#include"stdlibh"

#include"conioh"

#include"stringh"

#include"ioh"

#define ESC 27

#define ENTER 13

#define Y 89

#define y 121

#define N 78

#define n 110

void vmenu1();

char choose();

void password();

char getps();

void mimam();

void build();

void save();

void buy();

void open1();

void modify();

void modifyM();

void XnumM();

void XclassM();

void XnameM();

void add();

void xuehaoA();

void xingmingA();

void query();

void xuehaoQ();

void xingmingQ();

void delete1();

void xuehaoD();

void xingmingD();

void sort();

void sortX();

void sortN();

void sortA();

void all();

void help();

void lock();

void exit1();

struct record

{

char cnumber[15];

char cclass[15];

char cname[15];

char cmoney[10];

char cspend[10];

struct record next;

};

struct sot

{

char ccnumber[15];

struct sot pnext;

};

struct address

{

char adss;

struct address anext;

};

struct sot chead=NULL;

struct record head=NULL,ppointer=NULL,temp;

struct record modf;

struct address ahead=NULL;

FILE fp;

int Fflag=0;

int counts=0;

int loop=0;

void main()

{

char menu;

password();

while(loop==0)

{

system("CLS");

vmenu1();

menu=choose();

switch(menu)

{

case '1':build();break;

case '2':count++;

if(count==1)

{

buy();

break;

}

else

{

chead=NULL;

buy();

break;

}

case '3':open1();break;

case '4':modify();k=0;break;

case '6':query();break;

case '7':delete1();break;

case '9':all();break;

case 'b':help();break;

case 'c':lock();break;

case 'd':{loop=1;exit1();break;}

default:

printf("----------------------------请输入菜单上的序号 ------------------------\n");

printf("---------------------------按任意键重新开始选择 -----------------------\n");

fflush(stdin);

a=getch();

}

}

}

void password()

{

char password[15];

char password1;

char password2;

char p1[15];

char p2[15];

char a;

int i;

int count=0;

if(access("c:\\mimatxt",00)!=0)

{

while(1)

{

system("CLS");

for(i=0;i<5;i++)

printf("\n");

printf("\t\t欢迎使用学生打饭系统!\n\n");

printf("\n");

printf("\n----------------------------请创建管理员密码:--------------------------------\n");

password1=getps();

for(i=0;i<15;i++)

p1[i]=(password1++);

printf("\n");

printf("\n----------------------------请再输入一次密码:--------------------------------\n");

password2=getps();

for(i=0;i<15;i++)

p2[i]=(password2++);

if(!strcmp(p1,p2))

{

if((fp=fopen("c:\\mimatxt","w"))==NULL)

{

printf("错误!\n");

exit(0);

}

else

{

fprintf(fp,"%s",p1);

printf("\n密码创建完毕!\n");

fclose(fp);

system("cmdexe /c attrib c:\\mimatxt +h");

break;

}

}

else

{

printf("两次输入不一致,请重新输入密码:\n");

}

}

}

else

{

while(1)

{

count++;

for(i=0;i<5;i++)

printf("\n");

printf("----------------------------请输入管理员密码:----------------------------------\n");

password1=getps();

for(i=0;i<15;i++)

p1[i]=(password1++);

if((fp=fopen("c:\\mimatxt","r"))==NULL)

{

printf("错误!\n");

exit(0);

}

else

{

fscanf(fp,"%s",password);

fclose(fp);

if(!strcmp(p1,password))

break;

else

printf("\n密码错误!\n");

}

if(count<=9)

{

printf("\n您还有%d次机会。。。。。。\n",10-count);

printf("\n\n\n-------------------请按除ESC外的任意按键重新输入密码!----------------------\n");

a=getch();

if(a==ESC)

exit(0);

}

if(count==10)

{

printf("\n\n您无权使用本系统!\n");

printf("按任意键退出。。。。。。\n");

fflush(stdin);

a=getch();

exit(0);

}

}

}

printf("\n\n\n是否要对密码进行修改?\n");

printf("\t按Y或y更改,其余按键进入系统。\n");

fflush(stdin);

a=getchar();

if(a==Y||a==y)

{

mimam();

}

system("CLS");

for(i=0;i<5;i++)

printf("\n");

printf("\t\t欢迎使用学生打饭系统!\n\n");

printf(" ");

printf("\t\t按任意键进入系统。。。。。。\n\n");

a=getch();

}

char getps()

{

char p[15];

password=p;

while(1)

{

fflush(stdin);

password=getch();

if(password==ENTER)

{

break;

}

putchar('');

password++;

}

password='\0';

password=p;

return(password);

}

c语言中用于循环运行程序的结构有三种,分别是:

①for(表达式1;表达式2;表达式3){循环体}

    表达式1,是初始化条件,如i=0。

    表达式2,循环条件,满足就继续执行循环体,不满足就跳出循环。

    表达式3,这个一般是改变循环条件的地方,如i++。

参考代码:

#include<stdioh>

int main()//for循环计算1到10累加和 

{

    int i,sum=0;

for (i=0;i<=10;i++)

sum+=i;

   printf("%d\n",sum);

    return 0;

}

/

运行结果:

55

/

②while(表达式){循环体}

    表达式的值为真(非0)时, 执行循环体语句。

参考代码:

#include<stdioh>

int main()//while循环计算1到10累加和 

{

    int i,sum=0;

while(i<=10) {

sum+=i;

i++;

}

   printf("%d\n",sum);

    return 0;

}

/

运行结果:

55

/

③ do{循环体} while(表达式);

    先执行循环中的语句,然后再判断表达式是否为真, 如果为真则继续循环;否则, 则终止循环。

参考代码:

#include<stdioh>

int main()//do……while循环计算1到10累加和 

{

    int i,sum=0;

do{

sum+=i; 

i++;

} while(i<=10);

   printf("%d\n",sum);

    return 0;

}

/

运行结果:

55

/

要用到一些高级数据结构了。

用线段树维护区间MAX

对于第i个人,设当前区间为[x,y],初始为x=i+1,y=n

当x<y时

询问区间[x,(x+y)/2]的最大值

如果小于h[i],当前区间变为[(x+y)/2+1,y],否则变为[x,(x+y)/2]

最后x就是所求的j

貌似楼上正解

在C语言中动态的一维数组是通过malloc动态分配空间来实现的,动态的二维数组也可以通过malloc动态分配空间来实现。

在C语言中动态的一维数组是通过malloc动态分配空间来实现的,动态的二维数组也可以通过malloc动态分配空间来实现。

实际上,C语言中没有二维数组,至少对二维数组没有直接的支持,取而代之的是“数组的数组”,二维数组可以看成是由指向数组的指针构成的数组。对于一个二维数组p[i][j],编译器通过公式((p+i)+j)求出数组元素的值:

1、p+i 计算行指针。

2、(P+i) 具体的行,是一个指针,指向该行首元素地址。

3、(P+i)+j 得到具体元素的地址。

4、((p+i)+j) 得到元素的值。

基于上述原理,我们可以通过分配一个指针数组,再对指针数组的每一个元素分配空间实现动态分配二维数组。

实现

下面是本人写的一个动态分配二维数组的实现,适用于任何类型的二维数组,可以直接使用。

你参考模仿一下吧。

clear

clc

%

%初始化顾客源

%

%总仿真时间

Total_time = 10;

%队列最大长度

N = 10000000000;

%到达率与服务率

lambda = 10;

mu = 6;

%平均到达时间与平均服务时间

arr_mean = 1/lambda;

ser_mean = 1/mu;

arr_num = round(Total_timelambda2);

events = [];

%按负指数分布产生各顾客达到时间间隔

events(1,:) = exprnd(arr_mean,1,arr_num);

%各顾客的到达时刻等于时间间隔的累积和

events(1,:) = cumsum(events(1,:));

%按负指数分布产生各顾客服务时间

events(2,:) = exprnd(ser_mean,1,arr_num);

%计算仿真顾客个数,即到达时刻在仿真时间内的顾客数

len_sim = sum(events(1,:)<= Total_time);

%

%计算第 1个顾客的信息

%

%第 1个顾客进入系统后直接接受服务,无需等待

events(3,1) = 0;

%其离开时刻等于其到达时刻与服务时间之和

events(4,1) = events(1,1)+events(2,1);

%其肯定被系统接纳,此时系统内共有

%1个顾客,故标志位置1

events(5,1) = 1;

%其进入系统后,系统内已有成员序号为 1

member = [1];

for i = 2:arr_num

%如果第 i个顾客的到达时间超过了仿真时间,则跳出循环

if events(1,i)>Total_time

break;

else

number = sum(events(4,member) > events(1,i));

%如果系统已满,则系统拒绝第 i个顾客,其标志位置 0

if number >= N+1

events(5,i) = 0;

%如果系统为空,则第 i个顾客直接接受服务

else

if number == 0

%其等待时间为 0

20091516

%PROGRAMLANGUAGEPROGRAMLANGUAGE

events(3,i) = 0;

%其离开时刻等于到达时刻与服务时间之和

events(4,i) = events(1,i)+events(2,i);

%其标志位置 1

events(5,i) = 1;

member = [member,i];

%如果系统有顾客正在接受服务,且系统等待队列未满,则 第 i个顾客进入系统

else len_mem = length(member);

%其等待时间等于队列中前一个顾客的离开时刻减去其到 达时刻

events(3,i)=events(4,member(len_mem))-events(1,i);

%其离开时刻等于队列中前一个顾客的离开时刻加上其服

%务时间

events(4,i)=events(4,member(len_mem))+events(2,i);

%标识位表示其进入系统后,系统内共有的顾客数

events(5,i) = number+1;

member = [member,i];

end

end

end

end

%仿真结束时,进入系统的总顾客数

len_mem = length(member);

%

%输出结果

%

%绘制在仿真时间内,进入系统的所有顾客的到达时刻和离

%开时刻曲线图(stairs:绘制二维阶梯图)

stairs([0 events(1,member)],0:len_mem);

hold on;

stairs([0 events(4,member)],0:len_mem,'-r');

legend('到达时间 ','离开时间 ');

hold off;

grid on;

%绘制在仿真时间内,进入系统的所有顾客的停留时间和等

%待时间曲线图(plot:绘制二维线性图)

figure;

plot(1:len_mem,events(3,member),'r-',1: len_mem,events(2,member)+events(3,member),'k-');

legend('等待时间 ','停留时间 ');

grid on;

以上就是关于采用链队设计一个算法,反应病人看病、排队看医生的情况,在病人排队过程当中,主要重复两件事情:全部的内容,包括:采用链队设计一个算法,反应病人看病、排队看医生的情况,在病人排队过程当中,主要重复两件事情:、易语言怎么顺序循环执行子程序、用java实现银行排队程序,要求模拟银行的业务排队系统,要有界面,实现完成的排队和叫号等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9729681.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存