【03】顺序队列的初始化、入队、出队等操作
顺序队列的初始化、入队、出队等操作
#include<stdio.h> #include<stdlib.h> #define MAXSIZE 4 typedef int ElemType; //ElemType表示队列中存放的数据类型 typedef struct Queue { ElemType data[MAXSIZE]; int front; //头指针; int rear; //尾指针 }SqQueue; void InitQueue(SqQueue* Q); //初始化队列 int QueueEmpty(SqQueue* Q); //判断循环队列是否为空 int QueueFull(SqQueue* Q); //判断循环队列是否为满 int EnterQueue(SqQueue* Q,ElemType e); //进队,将元素e插入循环队列尾部 int DeleteQueue(SqQueue* Q,ElemType* e); //出队, 用e返回队头结点的值 void GetQhead(SqQueue* Q,ElemType* e); //获得队头结点的值,用e返回 void PrintQueue(SqQueue* Q); //输出队列中的结点值 int main() { SqQueue cycleq; SqQueue *q; q=&cycleq; int i; int flag; int x; int qhead; ElemType a[]={ 11,22,33}; //将数组a中的元素入队 InitQueue(q); //初始化队列 //入队**************************** for(i=0;i<3;i++) { flag=EnterQueue(q,a[i]); if(flag==1) printf("%4d入队成功! ",a[i]); } printf("队列为: "); PrintQueue(q); printf(" "); //入队/*************************** //出队/*************************** printf("************************** "); flag=DeleteQueue(q,&x); if(flag==1) printf("%4d出队成功",x); printf("队列为: "); PrintQueue(q); printf(" "); GetQhead(q,&qhead); printf("队列首部元素为:%4d ",qhead); //出队**************************** flag=EnterQueue(q,66); if(flag==1) printf("%4d入队成功! ",66); printf("队列为: "); PrintQueue(q); printf(" "); GetQhead(q,&qhead); printf("队列首部元素为:%4d ",qhead); //出队**************************** printf("************************** "); flag=DeleteQueue(q,&x); if(flag==1) printf("%4d出队成功 ",x); printf("队列为: "); PrintQueue(q); printf(" "); GetQhead(q,&qhead); printf("队列首部元素为:%4d ",qhead); //出队**************************** flag=EnterQueue(q,77); if(flag==1) printf("%4d入队成功! ",77); printf("队列为: "); PrintQueue(q); printf(" "); GetQhead(q,&qhead); printf("队列首部元素为:%4d ",qhead); return 0; } void InitQueue(SqQueue* Q) //初始化队列 { Q->front=0; Q->rear=0; } int QueueEmpty(SqQueue* Q) //判断循环队列是否为空 { if(Q->front==Q->rear) return 1; //队空返回1 else return 0; //队不空返回0 } int QueueFull(SqQueue* Q) //判断循环队列是否为满 { if(Q->front==(Q->rear+1)%MAXSIZE) return 1; //队满返回1 else return 0; //队不满 } int EnterQueue(SqQueue* Q,ElemType e) //进队,将元素e插入循环队列尾部 { if( QueueFull(Q)==1) { printf("队满! "); return 0; } else { Q->data[Q->rear]=e; Q->rear=(Q->rear+1)%MAXSIZE; // 队尾指针后移 return 1; } } int DeleteQueue(SqQueue* Q,ElemType* e) //出队, 用e返回队头结点的值 { if( QueueEmpty(Q)==1) { printf("队空! "); return 0; } else { *e=Q->data[Q->front]; //取队头结点的值 Q->front=(Q->front+1)%MAXSIZE; // 队头指针后移 return 1; } } void GetQhead(SqQueue* Q,ElemType* e) //获得队头结点的值,用e返回 { if( QueueEmpty(Q)==1) printf("队空! "); else *e=Q->data[Q->front]; //取队头结点的值 } void PrintQueue(SqQueue* Q) //输出队列中的结点值 { int i=Q->front; while(i!=Q->rear) { printf("%4d",Q->data[i]); i=(i+1)%MAXSIZE; } }
下一篇:
MacOS下vim的列编辑模式