国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C語言模擬銀行排隊叫號(順序隊)

這篇具有很好參考價值的文章主要介紹了C語言模擬銀行排隊叫號(順序隊)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一.隊列

隊列是一種具有先進先出(FIFO)特性的線性數(shù)據(jù)結(jié)構(gòu),它只允許在隊列的兩端進行插入和刪除操作。隊列的一端稱為隊尾(rear),另一端稱為隊頭(front)。新元素總是插入在隊列的隊尾,而從隊列中刪除元素時則總是刪除隊頭元素。

由于隊列具有FIFO特性,因此隊列通常用于需要按照順序處理數(shù)據(jù)的場景,比如任務(wù)調(diào)度、消息傳遞等。隊列有兩種基本操作:入隊(enqueue)和出隊(dequeue)。當一個元素被插入到隊列的隊尾時,我們稱之為入隊操作;當一個元素被從隊列的隊頭刪除時,我們稱之為出隊操作。除了入隊和出隊操作以外,隊列還有其他一些常見的操作,例如獲取隊頭元素(peek)、判空(isEmpty)等。

二.題目要求

由于現(xiàn)實中的銀行排隊問題比較復(fù)雜,難以簡單實現(xiàn),博主這里主要是為了練習隊列的相關(guān)操作,所以這里簡單模擬一下即可。它應(yīng)該包含以下功能:

  • 添加客戶:可以添加新的客戶到隊列中等待服務(wù)。

  • 刪除客戶:當銀行柜員完成服務(wù)之后,需要將客戶從隊列中刪除。

  • 顯示隊列:可以展示當前在隊列中等待服務(wù)的客戶列表。

三.順序隊列實現(xiàn)的原理

3.1原理

順序隊列是一種基于數(shù)組實現(xiàn)的隊列。其實現(xiàn)原理是使用一個固定大小的數(shù)組來存儲隊列中的元素,同時使用兩個變量front和rear分別表示隊頭和隊尾指針。

在順序隊列中,新元素入隊時,先檢查隊列是否已滿,如果已滿則無法入隊;否則將元素插入到rear指向的位置,并將rear指針后移一位。而出隊操作則是取出front指向的元素,并將front指針后移一位。

3.2注意

需要注意的是,順序隊列的主要缺點在于當隊列長度較大時,插入和刪除元素會導致整個隊列的元素向前移動,時間復(fù)雜度為O(n),因此對于頻繁插入和刪除元素的情況不適合使用順序隊列。

四.各部分功能及實現(xiàn)

1.定義結(jié)構(gòu)體

采用順序存儲結(jié)構(gòu)的隊列稱為順序隊

#define MaxSize 100

//定義號碼牌結(jié)構(gòu)表
typedef struct {
	char name[20];
	int num;
} Elemtype;

//定義循環(huán)順序隊列結(jié)構(gòu)體
typedef struct
{
	Elemtype data[MaxSize];                            //存放隊中元素
	int front,rear;                                    //隊頭和隊尾的偽指針
}SqQueue; 

2.初始化隊列

構(gòu)造一個空隊列,將front和rear指針均設(shè)置為初始狀態(tài)。即-1。

//初始化隊列
void InitQueue(SqQueue *&q)
{
	q=(SqQueue *)malloc(sizeof(SqQueue));       //申請一個順序隊大小的空隊列空間   
	q->front=q->rear=0;                        //隊頭和隊尾的偽指針均設(shè)置偽-1
}

3.隊列其他操作

銷毀隊列:釋放隊列q占用的存儲空間。

隊列判空:隊列為空,返回真;否則返回假。

//銷毀隊列
void DestroyQueue(SqQueue *&q)
{
	free(q);                               //釋放q所占的空間即可
}

//判斷空隊列
bool QueueEmpty(SqQueue *q)
{
	return (q->front==q->rear);
}

4.進隊

在隊列q不滿的情況下先將隊尾指針rear增1,然后將元素插入該位置。

//進隊列
bool enQueue(SqQueue *&q,Elemtype e)
{
	if((q->rear+1)%MaxSize==q->front)            //隊滿上溢出報錯
		return false;
	q->rear=(q->rear+1)%MaxSize;                 //隊尾增1
	q->data[q->rear]=e;                         //rear位置插入元素e
	return true;
}

5.出隊

在隊列不為空的條件下先將隊頭指針front增1,并將該位置的元素值賦給e。

//出隊列
bool deQueue(SqQueue *&q,Elemtype &e)
{
	if(q->rear==q->front)                                //隊空下溢出報錯
		return false;
	q->front=(q->front+1)%MaxSize;                      //隊頭增1
	e=q->data[q->front];
	return true;
}

6.叫號程序

顯示當前隊列,核心算法

//叫號程序
bool displist(SqQueue *&q)
{
	
	int i=q->front;
	if(q->rear==q->front)                                //隊空下溢出報錯
		return false;
	printf("排隊叫號次序:\n");
	while(i!=q->rear)
	{
		i++;
		printf("%d\t%s\n",q->data[i].num,q->data[i].name);
	}
	printf("---------------- \n");
	return true;
}

7.菜單實現(xiàn)

比較基礎(chǔ),重在整理

//菜單實現(xiàn)
void menu() {
	printf("      銀行叫號的應(yīng)用模擬:\n");
	printf("   -------------------------------\n");
	printf("      1.建立(初始化)隊列\(zhòng)n");
	printf("      2.取號業(yè)務(wù)辦理\n");
	printf("      3.叫號業(yè)務(wù)辦理\n");
	printf("      4.查看排隊信息\n");
	printf("      5.下班,不進行業(yè)務(wù)辦理\n");
	printf("      6.退出程序!!!\n");
	printf("   -------------------------------\n");
}

五.C語言實現(xiàn)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MaxSize 100

//定義號碼牌結(jié)構(gòu)表
typedef struct {
	char name[20];
	int num;
} Elemtype;

//定義循環(huán)順序隊列結(jié)構(gòu)體
typedef struct {
	Elemtype data[MaxSize]; //存放隊中元素
	int front, rear; //隊頭和隊尾的偽指針
} SqQueue, *Saquene; //順序隊類型

//初始化隊列
void InitQueue(Saquene *q) {
	*q = (SqQueue *) malloc(sizeof(SqQueue)); //申請一個順序隊大小的空隊列空間
	(*q)->front = (*q)->rear = 0; //隊頭和隊尾的偽指針均設(shè)置偽-1
}

//銷毀隊列
void DestroyQueue(Saquene q) {
	free(q); //釋放q所占的空間即可
}

//判斷空隊列
int QueueEmpty(Saquene q) {
	return (q->front == q->rear);
}

//進隊列
int enQueue(Saquene q, Elemtype *e) {
	if ((q->rear + 1) % MaxSize == q->front) //隊滿上溢出報錯
		return 0;
	q->rear = (q->rear + 1) % MaxSize; //隊尾增1
	q->data[q->rear] = *e; //rear位置插入元素e
	return 1;
}

//出隊列
int deQueue(Saquene q, Elemtype *e) {
	if (q->rear == q->front) //隊空下溢出報錯
		return 0;
	q->front = (q->front + 1) % MaxSize; //隊頭增1
	*e = q->data[q->front];
	return 1;
}

//叫號程序
int displist(Saquene q) {
	
	int i = q->front;
	if (q->rear == q->front) //隊空下溢出報錯
		return 0;
	printf("排隊叫號次序:\n");
	while (i != q->rear) {
		i++;
		printf("%d\t%s\n", q->data[i].num, q->data[i].name);
	}
	printf("---------------- \n");
	return 1;
}

//菜單實現(xiàn)
void menu() {
	printf("      銀行叫號的應(yīng)用模擬:\n");
	printf("   -------------------------------\n");
	printf("      1.建立(初始化)隊列\(zhòng)n");
	printf("      2.取號業(yè)務(wù)辦理\n");
	printf("      3.叫號業(yè)務(wù)辦理\n");
	printf("      4.查看排隊信息\n");
	printf("      5.下班,不進行業(yè)務(wù)辦理\n");
	printf("      6.退出程序!??!\n");
	printf("   -------------------------------\n");
}

//主程序
int main() {
	int flag = 1, i, j;
	int count = 4;
	Elemtype e, pno;
	Elemtype a[4] = {"張三", 1, "李四", 2, "王五", 3, "趙六", 4};
	Saquene p;
	menu();
	while (flag == 1) {
		printf("請選擇:\n");
		scanf("%d", &i);
		switch (i) {
		case 1:
			InitQueue(&p);
			for (j = 0; j < 4; j++) {
				e = a[j];
				enQueue(p, &e);
			}
			break;
		case 2:
			count++;
			printf("請輸入客戶姓名:\n");
			scanf("%s", pno.name);
			pno.num = count;
			enQueue(p, &pno);
			break;
		case 3:
			deQueue(p,&e);
			printf("正在辦理業(yè)務(wù)的客戶為:%d\t%s\n",e.num,e.name);
			break;
		case 4:
			displist(p);
			printf("\n");
			break;
		case 5:
			printf("下班,不進行業(yè)務(wù)辦理\n");
			break;
		case 6:
			flag=0;
			printf("退出程序");
			break;
		}
	}
	return 0;
}

六.運行結(jié)果

C語言模擬銀行排隊叫號(順序隊)

歡迎收看博主其他系列的文章!文章來源地址http://www.zghlxwxcb.cn/news/detail-485916.html

到了這里,關(guān)于C語言模擬銀行排隊叫號(順序隊)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 門診排隊叫號系統(tǒng),有序叫號就診,適用醫(yī)院醫(yī)院、門診部、診所等

    門診排隊叫號系統(tǒng),有序叫號就診,適用醫(yī)院醫(yī)院、門診部、診所等

    排隊叫號系統(tǒng),是將互聯(lián)網(wǎng)信息技術(shù)與門診預(yù)約、簽到、提醒、叫號、接診等環(huán)節(jié)相結(jié)合,實現(xiàn)門診流程式便捷叫號服務(wù)。 為助力門診營造一個良好有序的就診環(huán)境,打造科學合理的就診流程,今天給大家推薦一款一款便捷排隊叫號系統(tǒng),適用于各類醫(yī)院、門診部、診所等。

    2024年02月10日
    瀏覽(30)
  • 0072-基于單片機的排隊叫號仿真設(shè)計

    0072-基于單片機的排隊叫號仿真設(shè)計

    1、采用51/52單片機作為主控芯片; 2、采用兩個1602液晶,各顯示取號和叫號信息; 3、共四個窗口,每個窗口均有單獨叫號鍵及重復(fù)叫號鍵,叫號時會有鈴聲提醒; 4、有一個取號鍵,液晶顯示您的號碼及等待人數(shù); ? 采用Proteus作為仿真設(shè)計工具。Proteus是一款著名的EDA工具(

    2024年02月19日
    瀏覽(19)
  • VS+Qt+C++醫(yī)院排隊叫號系統(tǒng)

    VS+Qt+C++醫(yī)院排隊叫號系統(tǒng)

    程序示例精選 VS+Qt+C++醫(yī)院排隊叫號系統(tǒng) 如需安裝運行環(huán)境或遠程調(diào)試,見文章底部個人 QQ 名片,由專業(yè)技術(shù)人員遠程協(xié)助! 這篇博客針對VS+Qt+C++醫(yī)院排隊叫號系統(tǒng)編寫代碼,帶用戶登錄,管理員登錄,增刪改查,代碼整潔,規(guī)則,易讀。 學習與應(yīng)用推薦首選。 一、所需工

    2024年02月03日
    瀏覽(24)
  • 基于51單片機的雙機串口通信排隊叫號系統(tǒng)(LCD顯示)設(shè)計

    基于51單片機的雙機串口通信排隊叫號系統(tǒng)(LCD顯示)設(shè)計

    仿真圖:proteus8.9以上 程序代碼:KEIL4/KEIL5 原理圖:AD 設(shè)計編號:A0006 基于51單片機的雙機串口通信排隊叫號系統(tǒng)(LCD顯示)設(shè)計 結(jié)合實際情況,基于51單片機設(shè)計一個排隊叫號系統(tǒng)設(shè)計。該系統(tǒng)應(yīng)滿足的功能要求為: 由51單片機、按鍵模塊、LCD1602液晶屏、蜂鳴器呼叫模塊構(gòu)成 具

    2024年02月04日
    瀏覽(24)
  • 銀行業(yè)務(wù)隊列簡單模擬

    銀行業(yè)務(wù)隊列簡單模擬

    要求: 1。設(shè)銀行有A、B兩個業(yè)務(wù)窗口,A窗口的處理速度是B的2倍(A處理完兩個顧客時,B處理完一個顧客) 2.奇數(shù)編號的顧客到A窗口辦理業(yè)務(wù),偶數(shù)編號的顧客到B窗口辦理業(yè)務(wù) 當不同窗口同時處理完兩個顧客時,A窗口顧客優(yōu)先輸出 代碼: 運行:

    2024年02月08日
    瀏覽(16)
  • 【數(shù)據(jù)結(jié)構(gòu)】順序隊列模擬實現(xiàn)

    【數(shù)據(jù)結(jié)構(gòu)】順序隊列模擬實現(xiàn)

    ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???? ?? ?? ?? 個人主頁 :阿然成長日記 ??點擊可跳轉(zhuǎn) ?? 個人專欄: ??數(shù)據(jù)結(jié)構(gòu)與算法??C語言進階 ?? 不能則學,不知則問,恥于問人,決無長進 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 一、隊列的基本概念

    2024年02月10日
    瀏覽(25)
  • 【NJUPT】 數(shù)據(jù)結(jié)構(gòu)與算法分析_銀行排隊系統(tǒng)

    銀行排隊系統(tǒng) 【問題描述】 試設(shè)計一個銀行排隊系統(tǒng),模擬一般銀行的日常對外營業(yè)服務(wù),包括顧客到達、等待、辦理業(yè)務(wù)及離開等事件。要求體現(xiàn)“先來先服務(wù)”的原則,將傳統(tǒng)物理的多個顧客排隊隊列變?yōu)橐粋€邏輯隊列處理,顧客只需取票(即刻進隊,排隊),等待叫

    2024年02月04日
    瀏覽(20)
  • 順序表(數(shù)據(jù)結(jié)構(gòu))---排隊啦!

    順序表(數(shù)據(jù)結(jié)構(gòu))---排隊啦!

    目錄 前言: 1.線性表的性質(zhì) 2.靜態(tài)數(shù)組or動態(tài)數(shù)組 2.1靜態(tài)數(shù)組 2.2動態(tài)數(shù)組 3.結(jié)構(gòu)體的創(chuàng)建 4*接口函數(shù)的詳細講解 4.1初始化結(jié)構(gòu)體 4.2尾插 4.3打印數(shù)據(jù) 4.4用完后銷毀創(chuàng)建的堆空間 4.5 尾刪 4.6頭插 4.7頭刪 4.8查找 4.9任意位置插入 4.10任意位置刪除? ?博主CSDN:啊蘇要學習 ? ?

    2024年02月04日
    瀏覽(88)
  • 頭歌(C語言)-數(shù)據(jù)結(jié)構(gòu)與算法-隊列-第1關(guān):實現(xiàn)一個順序存儲的隊列

    頭歌(C語言)-數(shù)據(jù)結(jié)構(gòu)與算法-隊列-第1關(guān):實現(xiàn)一個順序存儲的隊列

    任務(wù)描述 相關(guān)知識 順序存儲的隊列 順序隊列的主要操作 編程要求 測試說明 任務(wù)描述 本關(guān)任務(wù):實現(xiàn) step1/SeqQueue.cpp 中的 SQ_IsEmpty 、 SQ_IsFull 、 SQ_Length 、 SQ_In 和 SQ_Out 五個操作函數(shù),以實現(xiàn)判斷隊列是否為空、是否為滿、求隊列長度、隊列元素入隊和出隊等功能。 相關(guān)知

    2024年02月06日
    瀏覽(162)
  • 【數(shù)據(jù)結(jié)構(gòu)】詳談隊列的順序存儲及C語言實現(xiàn)

    【數(shù)據(jù)結(jié)構(gòu)】詳談隊列的順序存儲及C語言實現(xiàn)

    大家好,很高興又和大家見面啦!?。?在上一篇內(nèi)容中,我們在介紹完隊列的基本概念、重要術(shù)語以及基本操作后,又回顧了一下數(shù)據(jù)結(jié)構(gòu)的三要素——數(shù)據(jù)的邏輯結(jié)構(gòu)、數(shù)據(jù)的存儲結(jié)構(gòu)以及數(shù)據(jù)的運算。 隊列這種數(shù)據(jù)結(jié)構(gòu)我們已經(jīng)介紹了它的邏輯結(jié)構(gòu)以及數(shù)據(jù)運算的定義

    2024年01月21日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包