本文章包括了队列的初始化,插入元素,删除元素等
- 队列结构体的创建
typedef struct
{
ElemType *base;//队列存储元素,也可用数组代替
int front;//队列头部
int rear;//队列尾部
}SqQueue;
- 队列的初始化
void Init_Queue(SqQueue *q)
{
q->base=(ElemType *)malloc(MAX_QUEUE_SIZE*sizeof(ElemType));
if(!q->base)//判断是否还有存储空间
exit (0);
q->front=q->rear=0;//将队尾和队头都指向0处使其初始化
}
- 入队
int Insert_Queue(SqQueue *q,ElemType e)
{
if((q->rear+1)%MAX_QUEUE_SIZE==q->front)//判断此队列是否已满
return ERROR;
q->base[q->rear]=e;//将所插入的元素赋值给队尾所指处
q->rear=(q->rear+1)%MAX_QUEUE_SIZE;//将队尾后移
return OK;
}
- 出队
int Delete_Queue(SqQueue *q,ElemType *e)
{
if(q->rear==q->front)//判断当前队列是否为空
return ERROR;
*e=q->base[q->front];//将所要出队的那个元素取出
q->front=(q->front)%MAX_QUEUE_SIZE;//队头后移
return OK;
}
- 简单的入队和出队操作
#include <stdio.h>
#include <stdlib.h>
#define MAX_QUEUE_SIZE 10
#define OK 0
#define ERROR -1
typedef char ElemType;
typedef struct
{
ElemType *base;
int front;
int rear;
}SqQueue;
void Init_Queue(SqQueue *q)
{
q->base=(ElemType *)malloc(MAX_QUEUE_SIZE*sizeof(ElemType));
if(!q->base)
exit (0);
q->front=q->rear=0;
}
int Insert_Queue(SqQueue *q,ElemType e)
{
if((q->rear+1)%MAX_QUEUE_SIZE==q->front)
return ERROR;
q->base[q->rear]=e;
q->rear=(q->rear+1)%MAX_QUEUE_SIZE;
return OK;
}
int Delete_Queue(SqQueue *q,ElemType *e)
{
if(q->rear==q->front)
return ERROR;
*e=q->base[q->front];
q->front=(q->front)%MAX_QUEUE_SIZE;
return OK;
}
void Print_Queue(SqQueue *q)//输出函数
{
int p;
printf("OUTPUT Queue: \n");
p=q->front;
while(p!=q->rear)
{
printf("%d :%c ",p,q->base[p]);
p=(p+1)%MAX_QUEUE_SIZE;
}
printf("\n");
}
int main()
{
int flag=1;
ElemType x;
SqQueue q;
Init_Queue(&q);
while(flag)
{
printf("In :1; OUT :2; END :0\n");//1代表入队;2代表出队;0代表结束操作
scanf("%d",&flag);
getchar();
if(flag==1)
{
printf("In:");
scanf("%c",&x);
getchar();
if(Insert_Queue(&q,x)==ERROR)
printf("ERROR\n");
/*else
Print_Queue(&q);*/
}
else if(flag==2)
{
if(Delete_Queue(&q,&x)==ERROR)
printf("ERROR\n");
else
Print_Queue(&q);
}
else if(flag==0)
break;
}
return 0;
}
- 运行结果如下: