美文网首页
数据结构c语言实现顺序循环队列

数据结构c语言实现顺序循环队列

作者: 甜柚小仙女 | 来源:发表于2019-01-27 12:11 被阅读0次
#include<stdio.h>
#include<stdlib.h>
#define ElemType int 
#define MAXSIZE 10
//比队列实际大小多申请一个空间是为了保证指针循环公式的正确,
//避免头尾指针相遇时可能对空也可能对满 使对尾指针可以最大为MAXSIZE,多出来的空间不存值 

typedef struct{
    ElemType data[MAXSIZE+1]; //定义队列,长度比队列实际大小多一个空间 
    int front;   //定义队头 
    int rear;    //定义对尾指针 
    int count;     //队列中元素个数 
}Queue;

//初始化队列 
void initQueue(Queue *q){
    q->front=0;
    q->rear=0;
    q->count=0;
}
//判断对空 头指针和尾指针相遇
int isEmpty(Queue *q){
    if(q->front==q->rear){   
        return 1;
    }
    return 0;
}
//判断对满  对尾指针对 队列最大空间求余 和对头一样,公式是为了保证余数为正 
int isFull(Queue *q){
    if((q->rear+1)%(MAXSIZE+1)==q->front){
        return 1;
    }
    return 0;
}
//入队 对不满 入队 尾指针后移 数量加一 
void InQueue(Queue *q,ElemType ele){
    if(!isFull(q)){
        q->data[q->rear] = ele;
        q->rear = (q->rear+1)%(MAXSIZE+1);
        q->count++;
    }
    else{
        printf("队列已满\n");
    }
}
//出对 对不为空 出对,头指针后移 数量减一 
ElemType outQueue(Queue *q){
    if(!isEmpty(q)){
        ElemType res = q->data[q->front];
        q->front = (q->front+1)%(MAXSIZE+1);
        q->count--;
        return res;
    }
    return -1;
}
//查询元素个数 
int getCount(Queue q){
    return q.count;
}
int main(){
    Queue *q;
    int i;
    initQueue(q);
    printf("1为空%d\n",isEmpty(q));
    for(i=0;i<10;i++){
        InQueue(q,i);
    }
    printf("1为满%d\n",isFull(q));
    for(i=0;i<5;i++){
        printf("%d ",outQueue(q));
    }
    printf("\n");
    printf("1为满%d\n",isFull(q));
    
    InQueue(q,11);
    for(i=0;i<6;i++){
        printf("%d ",outQueue(q));
    }
    printf("\n");
    printf("队列个数:%d\n",getCount(*q));
}

相关文章

网友评论

      本文标题:数据结构c语言实现顺序循环队列

      本文链接:https://www.haomeiwen.com/subject/mmpgjqtx.html