队列(连续存储方式实现)

/* 
    队列(连续存储方式实现) 
    2018年5月11日17点28分 
      
*/  
  
  
#include <stdio.h>   
#include <malloc.h>  
#define Ele int  
  
  
typedef struct ArrayQueue  
{  
    Ele *dataArr;  
    int front;  
    int rear;  
    int lenght;   
      
}ArrayQueue;  
  
ArrayQueue* NewArrayQueue(int lenght);  
int Push(ArrayQueue* AQ, Ele data);  
Ele Pop(ArrayQueue* AQ);  
  
int IsFull(ArrayQueue* AQ);  
int IsEmpty(ArrayQueue* AQ);  
  
int main()  
{  
    int i = 0;  
    int result;  
    int isEmpty;   
    ArrayQueue* AQ = NewArrayQueue(10);  
      
    for(i = 0; i < 20; i++)  
    {  
        result = Push(AQ, i * 2);  
        printf("入队数值: %d        入队状况:%d Front Rear [%d,%d] \n", i * 2, result, AQ->front, AQ->rear);  
    }  
    for(i = 0; i < 20; i++)  
    {  
        isEmpty = IsEmpty(AQ);  
        result =  Pop(AQ);  
        printf("出队数值: %d        队列为空:%d     Front Rear [%d,%d] \n",result, isEmpty, AQ->front, AQ->rear);  
    }  
    for(i = 0; i < 20; i++)  
    {  
        result = Push(AQ, i * 6);  
        printf("入队数值: %d        入队状况:%d Front Rear [%d,%d] \n", i * 2, result, AQ->front, AQ->rear);  
          
        isEmpty = IsEmpty(AQ);  
        result =  Pop(AQ);  
        printf("出队数值: %d        队列为空:%d     Front Rear [%d,%d] \n",result, isEmpty, AQ->front, AQ->rear);  
    }  
    for(i = 0; i < 11; i++)  
    {  
        printf("[遍历] %d\n",AQ->dataArr[i]);  
    }  
      
    return 0;  
}  
//初始化   
ArrayQueue* NewArrayQueue(int lenght)  
{  
    ArrayQueue* AQ = (ArrayQueue*)malloc(sizeof(ArrayQueue));  
    AQ->dataArr = (Ele*)malloc(sizeof(Ele) * (lenght + 1));  
    AQ->front = 0;  
    AQ->rear = 1;  
    AQ->lenght = lenght;  
    return AQ;  
}  
//入队  
int Push(ArrayQueue* AQ, Ele data)  
{  
    //1 判断队列是否满   
    if(IsFull(AQ))  
    {  
        return 0;  
    }  
    //2 入队  
    (AQ->dataArr)[AQ->rear] = data;  
    AQ->rear = (AQ->rear + 1) %  (AQ->lenght + 1);  
    return 1;  
}  
//出队  
Ele Pop(ArrayQueue* AQ)  
{  
    int index;  
    Ele data;  
    //1 判断队列是否空   
    if(IsEmpty(AQ))  
    {  
        return data;  
    }  
    //2 出队   
    if(AQ->front == AQ->lenght)  
    {  
        AQ->front = 0;  
    }  
    else  
    {  
        AQ->front ++;  
    }  
    data = (AQ->dataArr)[AQ->front];  
    return data;  
}  
  
//判断队列是否满  
int IsFull(ArrayQueue* AQ)  
{  
    if(AQ->front == AQ->rear)  
    {  
        return 1;  
    }  
    return 0;  
}   
//判断队列是否空  
int IsEmpty(ArrayQueue* AQ)  
{  
    if(AQ->front == 0)  
    {  
        if(AQ->rear == AQ->lenght)  
        {  
            return 1;  
        }  
    }  
    if(AQ->rear == 0)  
    {  
        if(AQ->rear + AQ->lenght + 1 - AQ->front == 1)  
        {  
            return 1;  
        }  
    }  
    else  
    {  
        if(AQ->rear - AQ->front == 1)  
        {  
            return 1;  
        }  
    }  
    return 0;  
}   
   
   
   
  
  
  
   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值