顺序队列

几点说明:

  1、队列是线性表的一种特殊情况

  2、队列只允许在一端进行插入元素,在另一端删除元素;插入元素的一端称为队尾(rear),删除元素的一端称为队首(front)

  3、队列的特点是“先进先出(FIFO)”

  4、为便于操作初始化队列时,约定front=rear=-1,即让对头指针与队尾指针均指向数组下标为0的空间的前一个位置,这样当插入或删除元素时,队尾或对头指针均向后移位即可

  5、在非空队列中,头指针front总是指向当前对头元素的前一个位置,尾指针rear总是指向当前队尾元素的位置

1.序队列的数据结构(C语言描述)如下:

#define MAXLEN 10    //定义队列的最大容量
typedef int Datatype;   //数据类型
typedef struct
{
    Datatype data[MAXLEN];
    int front,rear;    //定义对头与队尾指针
}SeQueue;

2.列初始化:

SeQueue InitSeQueue()   //队列初始化操作
{
    SeQueue q;
    q.front=-1;
    q.rear=-1;
    return(q);
}

3.入队操作:

int enterSeqQueue(SeQueue *q, int *x)    //入队操作
{
    if(q->rear>=MAXLEN-1)  //队列已满,插入失败
        return(0);
    else
    {
        q->rear++;
        q->data[q->rear]=x;
        return(1);
    }
}

4.出队操作:

int DelSeqQueue(SeQueue *q, int *x)     //出队操作
{
    if(q->front==q->rear)   //队列为空,无元素可删除
        return(0);
    else
    {
        q->front++;
        *x=q->data[q->front];
        return(1);
    }
}

顺序队列的综合操作的完整程序如下:

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#define MAXLEN 10    //定义队列的最大容量
typedef int Datatype;   //数据类型
typedef struct
{
    Datatype data[MAXLEN];
    int front,rear;    //定义对头与队尾指针
}SeQueue;

SeQueue InitSeQueue()   //队列初始化操作
{
    SeQueue q;
    q.front=-1;
    q.rear=-1;
    return(q);
}

int Getfront_seq(SeQueue *q, int *x)   //获取队首元素
{
    if(q->front==q->rear)
        return(0);
    else
    {
        *x=q->data[(q->front)+1];
        return(1);
    }
}

int enterSeqQueue(SeQueue *q, int *x)    //入队操作
{
    if(q->rear>=MAXLEN-1)  //队列已满,插入失败
        return(0);
    else
    {
        q->rear++;
        q->data[q->rear]=x;
        return(1);
    }
}

int Empty_seq(SeQueue *q)                //判断队空
{
    return(q->front==q->rear);
}

int DelSeqQueue(SeQueue *q, int *x)     //出队操作
{
    if(q->front==q->rear)   //队列为空,无元素可删除
        return(0);
    else
    {
        q->front++;
        *x=q->data[q->front];
        return(1);
    }
}

void print(SeQueue q)
{
    int n;
    if(q.front!=q.rear)
    {
        printf("队列的元素输出为: ");
        for(n=q.front+1;n<=q.rear;n++)
            printf("%d  ",q.data[n]);
    }
    else
        printf("队列为空!!");
    printf("
");
}


main()
{
    SeQueue Myqueue;
    int n,y,z,i,j;
    Myqueue=InitSeQueue();
    if(Empty_seq(&Myqueue)!=0)
        printf("
队列为空!");
    else
        printf("
队列非空!");
    printf("
请输入队列元素的数目: ");
    scanf_s("%d",&n);
    printf("请输入待入队的%d个元素:
",n);
    for(i=1;i<=n;i++)
    {
        scanf_s("%d",&y);
        enterSeqQueue(&Myqueue,y);
    }
    print(Myqueue);
    Getfront_seq(&Myqueue,&z);
    printf("当前队列的队头元素为: %d 
",z);
    print(Myqueue);
    printf("请输入出队元素个数j(j要小于n):
",n);
    scanf_s("%d",&j);
    for(i=1;i<=j;i++)
    {
        DelSeqQueue(&Myqueue,&z);
        printf("%d ",z);
    }
    printf("
");
    print(Myqueue);
    if(Empty_seq(&Myqueue)!=0)
        printf("
队列为空!");
    else
        printf("
队列非空!");
    system("pause");

}

结果为:

原文地址:https://www.cnblogs.com/kkdd-2013/p/3185885.html