cocobear9  
一枚普通的zisuer(lll¬ω¬),努力每天多学一点点

假设Q[0,5]是一个循环队列,初始状态为front=rear=0,请画出做完下列操作后队列的头尾指针的状态变化情况,

若不能入对,请指出其元素,并说明理由。

d, e, b, g, h入队

d, e出队

i , j , k , l , m入队

b出队

n, o, p, q, r入队

 

 

注意:(注意rear队尾进,front对头出,约定rear始终指向空,这样(rear+1)%max=front就为满)

#include <stdio.h>
#include <stdlib.h>
#define maxsize 6
#define OK 1
#define ERROR -1
typedef int Status ;
typedef struct queue
{
int rear ;
int front ;
char *arr;
}Queue ;
Queue * creat_queue(void);
Status enQueue(Queue * que,char val);
Status DeQueue(Queue * que,char * val);
void showQueue(Queue * que);
int Quelength(Queue * que);
int main()
{
char val ;
Queue *que =creat_queue();
enQueue(que,'d');
enQueue(que,'e');
enQueue(que,'b');
enQueue(que,'g');
enQueue(que,'h');
showQueue(que);
if(DeQueue(que,&val))
{
printf("出队成功,出队的元素是%c\n",val);
}
DeQueue(que,&val) ;
showQueue(que);
enQueue(que,'i');
enQueue(que,'j');
enQueue(que,'k');
enQueue(que,'l');
enQueue(que,'m');
showQueue(que);
DeQueue(que,&val) ;
showQueue(que);
enQueue(que,'n');
enQueue(que,'o');
enQueue(que,'p');
enQueue(que,'q');
enQueue(que,'r');
showQueue(que);

}
Queue * creat_queue(void)
{
Queue *que =(Queue*)malloc(sizeof(Queue));
if(!que) return NULL ;
que->arr =(char*)malloc(sizeof(char)*maxsize);
que->rear=0;
que->front = 0;
return que ;
}
Status enQueue(Queue * que,char val)
{
//循环队列满:约定rear所指的单元始终为空
if((que->rear+1)%maxsize ==que->front)
return ERROR ;
else
{
que->arr[que->rear]=val ; //尾部插入
que->rear=(que->rear+1)%maxsize ;
}
}
void showQueue(Queue * que)
{
int i=que->front ;
while(i!=que->rear)
{
printf("%c ",que->arr[i]);
i=(i+1)%maxsize;
}
printf("\n");
}
Status DeQueue(Queue * que,char * val)
{
//循环队列为空
if(que->rear==que->front)
return ERROR ;
else
{
*val= que->arr[que->front];
que->front =(que->front+1)%maxsize ;
return OK;
}
}
int Quelength(Queue * que)
{
return (que->rear-que->front+maxsize)%maxsize ;
}

posted on 2020-03-30 21:54  cocobear9  阅读(609)  评论(0)    收藏  举报