数据结构队列的各种操作

 

#include"stdio.h"  
#include"stdlib.h"  
typedef int ElementType;  
typedef struct Queue  
{  
    int rear,front;  
    ElementType *elements;  
    int MaxSize;  
}Queue;  
void InitQueue(Queue *Q,int sz)//初始化  
{  
    Q->MaxSize=sz;  
    Q->elements=(ElementType *)malloc(sizeof(ElementType)*Q->MaxSize);  
    Q->front=Q->rear=0;  
}  
void freeQueue(Queue *Q,int sz)//释放空间  
{  
    free(Q->elements);  
}  
void MakeEmpty(Queue *Q)//置空  
{  
    Q->front=Q->rear=0;  
}  
int Length(Queue *Q)//返回长度  
{  
    return (Q->rear-Q->front+Q->MaxSize)%(Q->MaxSize);  
}  
int IsFull(Queue *Q)//判断是否为满  
{  
    if (Q->rear!=0&&(Q->front==(Q->rear)%(Q->MaxSize)))  
        return 1;  
    else 
        return 0;  
}  
int IsEmpty(Queue *Q)//判断是否为空  
{  
    if(Q->front==Q->rear)  
        return 1;  
    else 
        return 0;  
}  
void EnQueue(Queue *Q)//进队  
{   ElementType item;  
    scanf("%d",&item);  
    while((!IsFull(Q))&&(item!=-1))  
    {  
        Q->elements[Q->rear]=item;  
        Q->rear=(Q->rear+1)%(Q->MaxSize);  
        scanf("%d",&item);  
    }  
}  
ElementType DeQueue(Queue *Q)  
{  
    ElementType item;  
    if(!IsEmpty(Q))  
    {  
        item=Q->elements[Q->front];  
        Q->front=(Q->front+1)%(Q->MaxSize);  
        return item;  
    }  
    else 
    {  
        printf("对空!\n");  
        exit(1);  
    }  
}  
ElementType GetFront(Queue *Q)  
{  
    if(!IsEmpty(Q))  
        return Q->elements[Q->front];  
    else 
    {  
        printf("队空!\n");  
        exit(1);  
    }  
}  
void main()  
{  
    int i;  
    Queue Q;  
    InitQueue(&Q,10);  
    EnQueue(&Q);  
    for(i=0;i<10;i++)  
    if(!IsEmpty(&Q))  
    printf("%-5d",DeQueue(&Q));  
} 

  

 

本文出自 “阿凡达” 博客,请务必保留此出处http://shamrock.blog.51cto.com/2079212/817866

posted @ 2014-08-10 10:06  商商-77  阅读(115)  评论(0编辑  收藏  举报