建立数据元素值为字符型的顺序队列

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<time.h>
#define ElemType char
#define SIZE 30//队列的最大长度

typedef struct QNode
{
	ElemType *base;//初始化的分配存储空间
	int front;//头指针针,若队列不空,则指向队头元素
	int rear;//尾指针,若队列不空,则指向队尾元素的下一个元素
}SqQueue;

int InitQueue(SqQueue &Q)//初始化一个空队列
{
	Q.base=(ElemType *)malloc(SIZE*sizeof(ElemType));//队列基址指针
	if(Q.base == NULL)//若分配内存失败
	{
		printf("存储分配失败!\n\n");return -1;
	}
	Q.front=Q.rear=0;//初始化队头和队尾指针
	return 1;
}

int Assignment(SqQueue &Q)//为队列中的元素赋值
{
	srand((unsigned)time(NULL));
	for(int i=0;i<10;i++)//往队列中添加10个数据
	{
		if((Q.rear+1)%SIZE == Q.front)break;
		Q.base[Q.rear]=(char)(rand()%26+'a');
		Q.rear=(Q.rear+1)%SIZE;//队尾指针前进一位
	}
	return 1;
}

int DisplayQueue(SqQueue Q)//从队头到队尾依次打印队列中的元素
{
	if(Q.rear == Q.front)
	{
		printf("当前队列为空!\n\n");return -1;
	}
	int p=Q.front;//令p指向队头
	while( (p+1) != Q.rear)//输出前面的元素
	{
		printf("%c - ",Q.base[p]);
		p=(p+1)%SIZE;
	}
	printf("%c\n\n",Q.base[p]);//输出最后一个元素
	return 1;
}

int QueueLength(SqQueue Q)//获取队列长度,即当前队列中数据元素的个数
{
	int len=(Q.rear-Q.front+SIZE)%SIZE;
	printf("当前队列长度为:%d\n\n",len);
	return 1;
}

int GetHead(SqQueue Q)//获取队头元素的值
{
	if(Q.front == Q.rear)
	{
		printf("当前队列为空!\n\n");return -1;
	}
	char e=Q.base[Q.front];
	printf("当前队头元素为:%c\n\n",e);
	return 1;
}

int EnQueue(SqQueue &Q)//在队尾插入新的元素作为新的队尾
{
	if((Q.rear+1)%SIZE == Q.front)
	{
		printf("当前队列已满!\n\n");return -1;
	}
	char e;
	printf("请输入你要插入队尾的字符:");
	scanf("%c",&e);
	Q.base[Q.rear]=e;
	Q.rear=(Q.rear+1)%SIZE;//队尾指针前进一位
	return 1;
}

int DeQueue(SqQueue &Q)//删除队头元素
{
	if(Q.rear == Q.front)
	{
		printf("当前队列已空!\n\n");return -1;
	}
	char e=Q.base[Q.front];
	printf("被删除的队头元素为:%c\n\n",e);
	Q.front=(Q.front+1)%SIZE;//队头指针前进一位
	return 1;
}

int main()
{
	SqQueue Q;
	InitQueue(Q);//初始化一个队列Q
	Assignment(Q);//为队列生成一些用于测试的数据
	DisplayQueue(Q);//打印队列中的数据
	QueueLength(Q);//求队列长度
	//GetHead(Q);
	//EnQueue(Q);
	//DeQueue(Q);
	return 1;
}

你可能感兴趣的:(队列,顺序队列,建立)