• 病人看病模拟程序


    6. 编写病人看病模拟程序。在病人排队过程中主要重复以下两件事:

    (1)病人到达诊室,将病历本交给护士,排到等待队列中候诊;

    (2)护士从等待队列中取出下一位病人的病历,该病人进入就诊室候诊。

    要求模拟病人等待就诊这一过程,主要功能说明如下:

    (1)排队—>输入排队病人的病历号,加入到病人排队队列中。

    (2)就诊—>病人排队队列中最前面的病人就诊,并将其从队列中删除。

    (3)查看排队—>从队首到队尾列出所有排队病人的病历号。
     

    1. #include
    2. #include
    3. typedef struct Node {
    4. int patientId;
    5. struct Node* next;
    6. } Node;
    7. typedef struct Queue {
    8. Node* front;
    9. Node* rear;
    10. } Queue;
    11. void initQueue(Queue* queue) {
    12. queue->front = NULL;
    13. queue->rear = NULL;
    14. }
    15. int isEmpty(Queue* queue) {
    16. return queue->front == NULL;
    17. }
    18. void enqueue(Queue* queue, int patientId) {
    19. Node* newNode = (Node*)malloc(sizeof(Node));
    20. newNode->patientId = patientId;
    21. newNode->next = NULL;
    22. if (isEmpty(queue)) {
    23. queue->front = newNode;
    24. queue->rear = newNode;
    25. }
    26. else {
    27. queue->rear->next = newNode;
    28. queue->rear = newNode;
    29. }
    30. }
    31. int dequeue(Queue* queue) {
    32. Node* nodeToDelete = queue->front;
    33. int patientId = nodeToDelete->patientId;
    34. queue->front = nodeToDelete->next;//直接指向下一个
    35. free(nodeToDelete);
    36. if (queue->front == NULL) {
    37. queue->rear = NULL;
    38. //当queue->front == NULL为空时
    39. //基于前面的已经指向了下一个位置,
    40. //可以确定此时已经遍历完了整个队列,所以说,
    41. //队尾也要更新为NULL
    42. //因为我们这是删除队列的操作,如果说,删除完
    43. //当前元素后下一个为空,那就说明当前队列为空
    44. //当然要将队头尾都重置!
    45. }
    46. return patientId;
    47. }
    48. void displayQueue(Queue* queue) {
    49. if (isEmpty(queue)) {
    50. printf("Queue is empty.\n");
    51. return;
    52. }
    53. Node* currentNode = queue->front;
    54. while (currentNode != NULL) {
    55. printf("%d ", currentNode->patientId);
    56. currentNode = currentNode->next;
    57. }
    58. printf("\n");
    59. //return 没必要写,等它执行结束函数也行
    60. }
    61. int main() {
    62. Queue queue;
    63. initQueue(&queue);
    64. int choice, patientId;
    65. do {
    66. printf("1. 排队\n");
    67. printf("2. 就诊\n");
    68. printf("3. 查看排队\n");
    69. printf("0. 退出\n");
    70. printf("请输入您的选择: ");
    71. scanf("%d", &choice);
    72. switch (choice) {
    73. case 1:
    74. printf("请输入病历号: ");
    75. scanf("%d", &patientId);
    76. enqueue(&queue, patientId);
    77. break;
    78. case 2:
    79. if (!isEmpty(&queue)) {
    80. printf("就诊病历号: %d\n", dequeue(&queue));
    81. }
    82. else {
    83. printf("队列为空,没有病人在等待就诊。\n");
    84. }
    85. break;
    86. case 3:
    87. printf("当前排队病人的病历号: ");
    88. displayQueue(&queue);
    89. break;
    90. case 0:
    91. printf("程序已退出。\n");
    92. break;
    93. default:
    94. printf("无效选择,请重新输入。\n");
    95. break;
    96. }
    97. printf("\n");
    98. } while (choice != 0);
    99. return 0;
    100. }

  • 相关阅读:
    Spring和Spring Boot区别
    Pandas数据处理分析系列6-数据特征分析
    python 实现k-means聚类算法 银行客户分组画像实战(超详细,附源码)
    应用统计学考研笔记:数据整理与抽样案例
    Rust中的结构体
    【数据结构】线性表的链式存储结构
    SpringBoot配置文件
    蓝桥等考C++组别六级 007
    Musical Christmas Lights——一个圣诞树灯光✨随音乐节奏改变的前端开源项目
    ssm智能社区服务的设计与实现毕业设计-附源码221512
  • 原文地址:https://blog.csdn.net/ASBSIHD/article/details/133713644