标题:
|
患者到医院看病事件模拟
|
时 限:
|
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 }
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 }