首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

數據結構實戰:C語言離散事件模擬銀行排隊系統

     編輯:關於C語言

離散事件模擬:C語言實現多窗口銀行排隊系統

使用鏈表實現多窗口佇列,隨機生成客戶到達與業務時間,時間推進模擬服務過程,展示離散事件模擬核心邏輯。

系統模型

  • MAX_WIN = 20 服務窗口
  • 每窗口一條循環鏈表佇列
  • 客戶屬性:stay 剩餘服務時間
  • 時間片推進:每步所有窗口當前客戶 stay--

核心數據結構


typedef struct customer *Link;
struct customer {
    int stay;      // 剩餘服務時間
    Link next;     // 下一客戶
};

Link windows[MAX_WIN] = {NULL};  // 20個窗口佇列頭指針

關鍵操作

客戶到達 (入佇)


void arrive(int w, int stay) {
    Link c = malloc(sizeof(*c));
    c->stay = stay;
    if (windows[w] == NULL) {
        windows[w] = c->next = c;  // 循環鏈表單節點自環
    } else {
        c->next = windows[w]->next;
        windows[w]->next = c;
        windows[w] = c;  // 尾指針後移
    }
}

服務完成 (出佇)


void depart(int w) {
    Link head = windows[w];
    if (head->next == head) {  // 單節點
        free(head);
        windows[w] = NULL;
    } else {
        Link first = head->next;
        head->next = first->next;
        free(first);
    }
}

時間推進


void tick() {
    for (int w = 0; w < MAX_WIN; w++) {
        if (windows[w] == NULL) continue;
        Link current = windows[w]->next;  // 隊首
        if (--current->stay <= 0)
            depart(w);
    }
}

狀態顯示


void display() {
    system("clear");  // Windows 用 cls
    for (int w = 0; w < MAX_WIN; w++) {
        printf("WIN%3d: ", w);
        if (windows[w] == NULL) { printf("\n"); continue; }
        Link p = windows[w]->next;
        do {
            printf("%4d", p->stay);
            p = p->next;
        } while (p != windows[w]->next);
        printf("\n");
    }
    Sleep(100);  // 100ms/步
}

主模擬循環


int main() {
    srand(time(NULL));
    for (init(); ; tick()) {
        arrive(rand()%MAX_WIN, rand()%100+1);  // 隨機到達
        display();
    }
}

模擬特點

  • 離散時間:固定時間步長推進
  • 隨機輸入:泊松到達/指數服務時間近似
  • 多佇列:每窗口獨立佇列 (可擴展為統一佇列)
  • 可視化:終端實時刷新佇列狀態

擴展方向

  • 事件驅動模擬:優先佇列管理事件時間點,跳躍式推進
  • 統計指標:平均等待時間、佇列長度分佈、窗口利用率
  • 策略優化:最短佇列優先、業務分流、動態開關窗口
  • 持久化:導出仿真軌跡分析

銀行排隊模擬是離散事件模擬教學經典案例,C 語言實現鍛鍊指針、鏈表、隨機數、終端控制綜合能力。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved