数据结构之队列的基本操作

本文章包括了队列的初始化,插入元素,删除元素等

  • 队列结构体的创建
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;
}
  • 运行结果如下:

猜你喜欢

转载自blog.csdn.net/qq_42735631/article/details/82957562