队列的实现-顺序表

声明:

#include "stdio.h"
#include "stdlib.h"

typedef int DataType;

//队头f指出实队头元素所的位置,队尾r指出实队尾元素所的位置的下一个位置
struct SeqQueue {
    int MAXNUM;
    int f,r;
    DataType *q;
};

typedef struct SeqQueue * PSeqQueue;

 

//创建一个空队
PSeqQueue createEmptyQueue_seq(int m)
{
    PSeqQueue paqu=(PSeqQueue)malloc(sizeof(struct SeqQueue));
    
    if (paqu!=NULL) 
    {
        paqu->q=(DataType *)malloc(sizeof(DataType) * m);
        
        if(paqu->q)
        {
            paqu->MAXNUM=m;
            paqu->f=0;
            paqu->r=0;
            return paqu;
        }
        else
        {
            free(paqu);
        }
    }
    
    printf("out of space!! \n");
    return NULL;
    
}

 

 

//判断paqu所指的队列是否为空队列
int isEmptyQueue_seq(PSeqQueue paqu)
{
    return (paqu->f==paqu->r);
}

 

//入队运算,为环形队列
void enQueue_seq(PSeqQueue paqu,DataType x)
{
    if ((paqu->r+1)% paqu->MAXNUM==paqu->f)
    {
        printf("Full queue. \n");
    }
    else
    {
        paqu->q[paqu->r]=x;
        paqu->r=(paqu->r+1)%paqu->MAXNUM;
    }
}

 

//出队
void deQueue_seq(PSeqQueue paqu)
{
    if (paqu->f == paqu->r) 
    {
        printf("Empty Queue. \n");
    }
    else
    {
        paqu->f=(paqu->f+1)%paqu->MAXNUM;
    }
}

 

//取队列的头元素
DataType frontQueue_seq(PSeqQueue paqu)
{
    if (paqu->f == paqu->r) 
    {
        printf("Empty Queue. \n");
    }
    else
    {
        return (paqu->q[paqu->f]);
    }
}

测试:

int main(int argv,char * argm[])
{
    PSeqQueue paqu;
    paqu=createEmptyQueue_seq(30);
    paqu->MAXNUM=30;
    enQueue_seq(paqu,10);
    enQueue_seq(paqu,30);
    enQueue_seq(paqu,32);
    enQueue_seq(paqu,3);
    enQueue_seq(paqu,5);
    enQueue_seq(paqu,8);

    printf("%d \n",paqu->f);
    printf("%d \n",paqu->r);
    printf("队头元素:%d \n",paqu->q[paqu->f]);
    printf("队尾元素:%d \n",paqu->q[paqu->r-1]);

    deQueue_seq(paqu);
    printf("%d \n",paqu->f);
    printf("%d \n",paqu->r);
    printf("队头元素:%d \n",paqu->q[paqu->f]);
    printf("队尾元素:%d \n",paqu->q[paqu->r-1]);
}

 

运行结果如下:

posted on 2012-05-12 21:05  yucong  阅读(408)  评论(0)    收藏  举报

导航