2023-04-01-循环队列CycleSqQueue的基本操作
//循环链表
//牺牲一个单元来区分队空还是队满
#include <stdio.h>
#include <stdbool.h>
#define MAXSIZE 6
typedef struct
{
int data[MAXSIZE];
int front,rear;
}CySqQueue;
void initCySqQueue(CySqQueue *C)//初始化循环链表
{
C->front=0;
C->rear=0;
}
bool isEmpty(CySqQueue C)//判断是否为空
{
if(C.front==C.rear)
{
return true;
}
else
{
return false;
}
}
bool EnCyQueue(CySqQueue *C,int e)//!!入队
{
if((C->rear+1)%MAXSIZE==C->front)//重点,判断队是否已满
{
return false;
}
else
{
C->data[C->rear]=e;
C->rear=((C->rear)+1)%MAXSIZE;//通过此条语句来实现循环队列
return true;
}
}
bool DeCyQueue(CySqQueue *C,int *e)//出队操作
{
if(isEmpty(*C))//判断队是否为空
{
return false;
}
else
{
*e=C->data[C->front];
C->front=(C->front+1)%MAXSIZE;//!!重点,不要忘记对MAXSIZE求余
return true;
}
}
int main()
{
CySqQueue C;
initCySqQueue(&C);
int x;
for(int i =0;i<MAXSIZE-1;i++)
{
scanf("%d",&x);
EnCyQueue(&C,x);
}
printf("C.front: %d C.rear: %d\n",C.front,C.rear);
printf("front_value: %d rear_value: %d\n",C.data[C.front],C.data[C.rear-1]);//rear当前所指的是牺牲区,所以rear-1才是最后一个元素
int *e;
int a=0;
e=&a;
DeCyQueue(&C,e);
printf("out_value: %d C.front: %d\n",*e,C.front);
EnCyQueue(&C,888);
printf("%d %d",C.rear,C.data[5]);//?,不能用rear-1来获取最后一个元素,因为当rear等于0时,rear-1为-1不存在
return 0;
}
C++:
//循环链表
//牺牲一个单元来区分队空还是队满
#include <stdio.h>
#include <stdbool.h>
#define MAXSIZE 6
typedef struct
{
int data[MAXSIZE];
int front,rear;
}CySqQueue;
void initCySqQueue(CySqQueue &C)//初始化循环链表
{
C.front=0;
C.rear=0;
}
bool isEmpty(CySqQueue C)//判断是否为空
{
if(C.front==C.rear)
{
return true;
}
else
{
return false;
}
}
bool EnCyQueue(CySqQueue &C,int e)//!!入队
{
if((C.rear+1)%MAXSIZE==C.front)//重点,判断队是否已满
{
return false;
}
else
{
C.data[C.rear]=e;
C.rear=((C.rear)+1)%MAXSIZE;//通过此条语句来实现循环队列
return true;
}
}
bool DeCyQueue(CySqQueue &C,int *e)//出队操作
{
if(isEmpty(C))//判断队是否为空
{
return false;
}
else
{
*e=C.data[C.front];
C.front=(C.front+1)%MAXSIZE;//!!重点,不要忘记对MAXSIZE求余
return true;
}
}
int main()
{
CySqQueue C;
initCySqQueue(C);
int x;
for(int i =0;i<MAXSIZE-1;i++)
{
scanf("%d",&x);
EnCyQueue(C,x);
}
printf("C.front: %d C.rear: %d\n",C.front,C.rear);
printf("front_value: %d rear_value: %d\n",C.data[C.front],C.data[C.rear-1]);//rear当前所指的是牺牲区,所以rear-1才是最后一个元素
int *e;
int a=0;
e=&a;
DeCyQueue(C,e);
printf("out_value: %d C.front: %d\n",*e,C.front);
EnCyQueue(C,888);
printf("%d %d",C.rear,C.data[5]);//?,不能用rear-1来获取最后一个元素,因为当rear等于0时,rear-1为-1不存在
return 0;
}