一雁歌、何為隊(duì)列宏浩?
隊(duì)列 (Queue) :是一種先進(jìn)先出 (First In First Out ,簡稱 FIFO) 的線性表,也是運(yùn)算受限的線性表靠瞎。只允許在表的一端進(jìn)行插入比庄,而在另一端進(jìn)行刪除求妹。
隊(duì)首 (front) :允許進(jìn)行刪除的一端稱為隊(duì)首。
隊(duì)尾 (rear) :允許進(jìn)行插入的一端稱為隊(duì)尾印蔗。
隊(duì)列中沒有元素時(shí)稱為空隊(duì)列扒最。在空隊(duì)列中依次加入元素 a 1 , a 2 , …, a n 之后, a 1 是隊(duì)首元素, a n 是隊(duì)尾元素。顯然退出隊(duì)列的次序也只能是 a 1 , a 2 , …, a n ,即隊(duì)列的修改是依先進(jìn)先出的原則進(jìn)行的,如圖 3-5 所示华嘹。
二、基本操作
1法竞、創(chuàng)建新隊(duì)列
2耙厚、判空
3、進(jìn)隊(duì)
4岔霸、出隊(duì)
5薛躬、清空隊(duì)
6、獲得隊(duì)頭元素
7呆细、遍歷隊(duì)
8型宝、銷毀隊(duì)
9、隊(duì)長
三絮爷、隊(duì)列的存儲(chǔ)實(shí)現(xiàn)及運(yùn)算實(shí)現(xiàn)
#include
#include//bool類型頭文件
#define MaxSize 50
typedef int ElemType;
//定義循環(huán)隊(duì)列結(jié)構(gòu)體
typedef struct
{
??? ElemType data[MaxSize];
??? int front,rear;
} SqQueue;?? ?//typedef struct 命名方法? 最簡潔的 適合入門???????????????? http://blog.csdn.net/jianxiong8814/article/details/1556589
//初始化
void InitQueue(SqQueue *Q)
{
??? (*Q).rear = (*Q).front = 0;
}
//判斷隊(duì)列是否為空
bool isEmpty(SqQueue *Q)
{
??? if((*Q).rear == (*Q).front)
??????? return true;
??? else
??????? return false;
}
//入隊(duì)操作
bool EnQueue(SqQueue *Q)
{
??? if((*Q).rear+1%MaxSize == (*Q).front)
??????? return false;
??? ElemType m;
??? printf("請(qǐng)輸入要輸入的數(shù)據(jù):");
??? scanf("%d",&m);
??? (*Q).rear = ((*Q).rear+1)%MaxSize;
??? (*Q).data[(*Q).rear] = m;
??? printf("%4d",(*Q).data[(*Q).rear]);
??? printf("\n");
//用于顯示入隊(duì)數(shù)據(jù)
??? return true;
}
//出隊(duì)操作
bool DeQueue(SqQueue *Q,ElemType *x)
{
??? if(isEmpty(Q))
??? {
??????? printf("該隊(duì)列為空\n\n");
??????? return false;
??? }
??? (*Q).front = ((*Q).front+1)%MaxSize;
??? *x = (*Q).data[(*Q).front];
??? printf("讀出的數(shù)據(jù)為:");
??? printf("%d\n",*x);
//用于顯示出隊(duì)數(shù)據(jù)
??? return true;
}
int main()
{
??? SqQueue q;
??? ElemType x,n;
??? InitQueue(&q);
??? while(1)
??? //下面是用戶操作菜單
??? {
??????? printf("?????? 主菜單\n");
??????? printf(" -----------------\n");
??????? printf("?? 0---結(jié)束\n");
??????? printf("?? 1-----插入\n");
??????? printf("?? 2-------讀出\n");
??????? printf("請(qǐng)選擇0--2:");
??????? scanf("%d",&n);
??????? switch(n)
??????? {
??????? case 0:
??????????? return 0;
??????? case 1:
??????????? EnQueue(&q);
??????????? break;
??????? case 2:
??????????? DeQueue(&q,&x);
??????????? break;
??????? }
??? }
??? return 0;
}
小編推薦一個(gè)學(xué)C語言/C++的學(xué)習(xí)裙【 六六六趴酣,二九五,四九八 】坑夯,邀請(qǐng)碼(懷念c)岖寞,無論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來了解一起進(jìn)步一起學(xué)習(xí)柜蜈!裙內(nèi)有開發(fā)工具仗谆,很多干貨和技術(shù)資料分享!