//静态队列的建立(带有tag)
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 10
//构建队列
typedef struct{
int data[MAXSIZE];
int front; //头指针始终指向队列首个元素
int rear; //尾指针始终指向队列末尾元素的下一个位置
int tag; //进元素打1 出元素打0 初始值为0
}seqQueue;
//初始化
void initiaQueue(seqQueue &Q){
int i;
for(i=0;i<MAXSIZE;i++){
Q.data[i] = -1;
}
Q.front = Q.rear = 0;
Q.tag = 0;
printf("初始化成功!\n");
}
//判断初始化
bool judge(seqQueue &Q){
if((Q.front == Q.rear)&&(Q.tag == 0)&&(Q.rear == 0)){
printf("初始化成功!\n");
return true;
}
else{
printf("初始化失败!\n");
return false;
}
}
//获取队列长度
int getLength(seqQueue &Q){
int len;
if((Q.rear == Q.front)&&(Q.tag == 1)){
return 10;
}
if((Q.front == Q.rear)&&(Q.tag == 0)){
return 0;
}
len = (Q.rear + MAXSIZE - Q.front)%MAXSIZE;
return len;
}
//构造循环队列
void setQueue(seqQueue &Q){
int ele;
printf("请输入你想要入队的元素(除数字-1外):\n");
scanf("%d",&ele);
while(ele != -1){
Q.data[Q.rear++] = ele;
Q.rear = Q.rear % MAXSIZE;
Q.tag = 1;
printf("%d已成功入队!\n");
printf("此时队尾指针指向%d\n",Q.rear);
printf("此时队头指针指向%d\n",Q.front);
if((Q.front == Q.rear)&&(Q.tag == 1)){
printf("此队列已满,无法再进行创建操作了!\n");
break;
}
else{
printf("结束创建请输入-1\n");
scanf("%d",&ele);
}
}
printf("创建队列完毕!\n");
printf("该队列的长度是%d\n",getLength(Q));
}
//入队
void enQueue(seqQueue &Q){
int ele;
if(getLength(Q) == MAXSIZE){
printf("此队列已满,无法进行入队操作!\n");
}
else{
printf("请输入入队的元素:\n");
scanf("%d",&ele);
Q.data[Q.rear++] = ele;
Q.rear = Q.rear % MAXSIZE;
printf("%d已成功入队!\n",ele);
Q.tag = 1;
}
//printf("此时队尾指针指向%d\n",Q.rear);
//printf("此时队头指针指向%d\n",Q.front);
printf("该队列的长度是%d\n",getLength(Q));
}
//出队
void outQueue(seqQueue &Q){
int ele;
if(getLength(Q) == 0){
printf("此队列为空,无须进行出队操作!\n");
}
else{
ele = Q.data[Q.front++];
Q.front = Q.front % MAXSIZE;
printf("出队操作执行完毕!\n");
Q.tag = 0;
}
printf("此次出队的元素是%d\n",ele);
//printf("此时队尾指针指向%d\n",Q.rear);
//printf("此时队头指针指向%d\n",Q.front);
printf("该队列的长度是%d\n",getLength(Q));
}
//读取队头元素
int getEle(seqQueue &Q){
int ele;
if((Q.front == Q.rear)&&(Q.tag == 0))
{
printf("此队列为空,无法进行读取操作!\n");
return 0;
}
ele = Q.data[Q.front];
return ele;
}
int main(){
int i;
seqQueue Q;
initiaQueue(Q);
judge(Q);
setQueue(Q);
//outQueue(Q);
//enQueue(Q);
//enQueue(Q);
for(i=0;i<10;i++){
outQueue(Q);
}
for(i=0;i<10;i++){
enQueue(Q);
}
enQueue(Q);
printf("此次读取的队头元素是%d\n",getEle(Q));
return 0;
}
静态队列的操作(带tag标签)
最新推荐文章于 2023-12-05 10:41:32 发布