患者到医院看病模拟

标题:
患者到医院看病事件模拟
时 限:
1000 ms
内存限制:
10000 K
总时限:
3000 ms
描述:
患者到医院看病的顺序是:先排队等候,再看病治疗。要求设计一个算法,模拟病人等候就诊的过程。
其中:“病人到达”用命令“A”(或“a”)表示,“护士让下一位就诊”用“N”(或“n”)表示,“不再接收病人排队”用“S”(或“s”)表示。
输入:
A(或 a)  病历号x
N(或n)
S(或s)
输出:
病历号为 x的病人入队,无输出
若无病人,显示无病人就诊;否则输出队列中的第一个病人就诊信息
今天不再接收病人排队,输出队列中所有病人的病历号
若输入其它命令,则输出"输入命令不合法!"
输入样例:
A 123
n
n
a 124
a 125
x
s
输出样例:
病历号为 123的病人就诊
无病人就诊
输入命令不合法!
今天不再接收病人排队,下列排队的病人依次就诊:124 125
提示:
 
来源:
 
 
  
1 #include < stdio.h >
2 #include < stdlib.h >
3 typedef struct node
4 {
5 int data;
6 int d_index;
7 struct node * next;
8 } * List;
9 typedef struct nn
10 {
11 char ch;
12 int c_index;
13 struct nn * next;
14 } * Com;
15 List Init()
16 {
17 List head = malloc( sizeof ( struct node));
18 head -> next = NULL;
19 head -> data =- 1 ;
20 head -> d_index =- 1 ;
21 return head;
22 }
23 Com Ini()
24 {
25 Com head = malloc( sizeof ( struct nn));
26 head -> next = NULL;
27 head -> ch = ' L ' ;
28 head -> c_index =- 1 ;
29 return head;
30 }
31 int SeeDocter(List head, int index)
32 { int Person_num =- 1 ;
33 int tem_index = 1 ;
34 while (head -> next != NULL && tem_index < index)
35 {
36 if (head -> next -> data > 0 )
37 {
38 Person_num = head -> next -> data;
39 head -> next -> data = 0 ;
40 break ;
41 }
42 head = head -> next;
43 tem_index ++ ;
44 }
45 return Person_num;
46 }
47 void Add_to_list(List head, int data, int index)
48 {
49
50 List newnode = malloc( sizeof ( struct node));
51 if (newnode == NULL)
52 {
53 printf( " memory out of use!\n " );
54 exit( 1 );
55 }
56 while (head -> next != NULL)
57 {
58 head = head -> next;
59 }
60 newnode -> data = data;
61 newnode -> d_index = index;
62 newnode -> next = NULL;
63 head -> next = newnode;
64
65 }
66 void Add_command(Com head, char c, int index)
67 {
68 Com newnode = malloc( sizeof ( struct nn));
69 if (newnode == NULL)
70 {
71 printf( " memory out of use!\n " );
72 exit( 1 );
73 }
74 while (head -> next != NULL)
75 {
76 head = head -> next;
77 }
78 newnode -> ch = c;
79 newnode -> c_index = index;
80 newnode -> next = NULL;
81 head -> next = newnode;
82 }
83 void main()
84 { char cm;
85 char select_char;
86 int select_index;
87 int Person =- 1 ;
88 int data;
89 int index = 0 ;
90 int chose = 1 ;
91 int c_index = 1 ;
92 int d_index = 1 ;
93 List head = Init();
94 Com m_com = Ini();
95 while ( 1 )
96 {
97 scanf( " %c " , & cm);
98
99 if (cm == ' S ' || cm == ' s ' )
100 { Add_command(m_com, ' s ' ,c_index);
101 break ;
102 }
103 switch (cm)
104 {
105 case ' A ' :
106 case ' a ' :Add_command(m_com, ' a ' ,c_index);
107 scanf( " %d " , & data);
108 Add_to_list(head,data,d_index);
109 d_index ++ ;
110 c_index ++ ;
111 break ;
112 case ' N ' :
113 case ' n ' :Add_command(m_com, ' n ' ,c_index);
114 Add_to_list(head, 0 ,d_index);
115 c_index ++ ;
116 d_index ++ ;
117 break ;
118 case ' \n ' : break ;
119
120 default :Add_command(m_com,cm,c_index);
121 Add_to_list(head, - 100 ,d_index);
122 c_index ++ ;
123 d_index ++ ;
124 break ;
125
126
127 }
128 }
129 while (m_com -> next -> ch != ' s ' )
130 {
131 select_char = m_com -> next -> ch;
132 select_index = m_com -> next -> c_index;
133 switch (select_char)
134 {
135 case ' a ' : break ;
136 case ' n ' :Person = SeeDocter(head,select_index);
137 if (Person > 0 )
138 printf( " 病历号为%d的病人就诊\n " ,Person);
139 else
140 printf( " 无病人就诊\n " );
141 break ;
142 default : printf( " 输入命令不合法!\n " ); break ;
143 }
144 m_com = m_com -> next;
145 }
146 printf( " 今天不再接收病人排队,下列排队的病人依次就诊: " );
147 while (head -> next != NULL)
148 {
149 if (head -> next -> data > 0 )
150 {
151 printf( " %d \n " ,head -> next -> data);
152 head = head -> next;
153 }
154 else
155 head = head -> next;
156 }
157
158
159 }

转载于:https://www.cnblogs.com/huzhongzhong/archive/2011/06/09/two.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值