#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实现银行排队程序,要求模拟银行的业务排队系统,要有界面,实现完成的排队和叫号等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)