码迷,mamicode.com
首页 > 其他好文 > 详细

顺序队列

时间:2017-11-26 13:53:12      阅读:108      评论:0      收藏:0      [点我收藏+]

标签:max   while   void   ini   define   ret   结束   链队列   指针   

  

///当不确定队列的长度时,最好选择链队列
#include<bits/stdc++.h>
#define OK 1;
#define ERROR 0;
#define MAXQSIZE 100 ///最大队列长度

typedef int Status;
typedef int ElemType;

typedef struct
{
    ElemType *base; ///动态分配存储空间,分配出来的即数组空间
    int front;
    int rear;
    ///注意:front 和 rear 只是指针,指向下标
}SqQueue;

///初始化
Status Init(SqQueue &Q)
{
    Q.base = (ElemType*)malloc(MAXQSIZE*sizeof(ElemType));
    if(!Q.base)
        exit(1);
    Q.front=Q.rear=0;
    return OK;
}
///判断队列是否为空
bool EmptyQueue(SqQueue Q)
{
    if(Q.front==Q.rear)
        return true;
    else
        return false;
}

///求队列长度
int QueueLength(SqQueue Q)
{
    ///因为rear 可能比 front 小
    int len = (Q.rear-Q.front+MAXQSIZE)%MAXQSIZE;
    return len;
}

///取队头元素
int GetHead(SqQueue Q,ElemType &e)
{
    if(Q.front==Q.rear)
    {
        printf("队列为空,不存在队头元素!\n");
        return ERROR;
    }
    e  = Q.base[Q.front];
    return e;
}

///入队
Status Push(SqQueue &Q,ElemType e)
{
    if((Q.rear+1)%MAXQSIZE==Q.front) ///队满
    {
        return ERROR;
    }
    else
    {
        Q.base[Q.rear]=e;
        Q.rear=(Q.rear+1)%MAXQSIZE;
        return OK;
    }
}
///出队
int Pop(SqQueue &Q)
{
    if(Q.front==Q.rear)
    {
        printf("队列为空,无元素可出队!\n");
        return ERROR;
    }
    else
    {
        ElemType e=Q.base[Q.front];
        Q.front=(Q.front+1)%MAXQSIZE;
        return e;
    }
}

///遍历队内元素
void Print(SqQueue Q)
{
    while(Q.front!=Q.rear)
    {
        ElemType e;
        printf("%d",GetHead(Q,e));
        if(Q.front != Q.rear -1)
            printf("--");
        Q.front=(Q.front+1)%MAXQSIZE;
    }
    printf("\n");
}

int main()
{
    int n;
    SqQueue Q;
    Init(Q);
    ElemType e;
    printf("请输入入栈元素(以0为结束标志):");
    while(~scanf("%d",&n))
    {
        if(n == 0)
            break;
        Push(Q,n);
    }
    if(EmptyQueue(Q))
        printf("Yes , kong\n");
    else
        printf("No kong!\n");

    printf("队列的长度:%d\n",QueueLength(Q));
    printf("队内元素:");
    Print(Q);
    printf("------------------------------\n");
    printf("队列的队首元素:%d\n",GetHead(Q,e));
    printf("------------------------------\n");
    printf("出队的元素:%d\n",Pop(Q));
    printf("------------------------------\n");
    printf("队列的队首元素:%d\n",GetHead(Q,e));
    printf("------------------------------\n");
    printf("队列的长度:%d\n",QueueLength(Q));
    printf("队内元素:");
    Print(Q);
    printf("------------------------------\n");
    return 0;
}

/*
1 2 3 4 5 0
*/

 

顺序队列

标签:max   while   void   ini   define   ret   结束   链队列   指针   

原文地址:http://www.cnblogs.com/hhkobeww/p/7898796.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!