数据结构——顺序队列(sequence queue)

Posted noonjuan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构——顺序队列(sequence queue)相关的知识,希望对你有一定的参考价值。

/* sequenceQueue.c */
/* 顺序队列 */

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

#define MAXSIZE 100

/* 顺序循环队列数据结构 */
/* 一个圆圈,front指向队列头,rear指向队列尾 */
/* 
    front     ->       ...         -> rear
    data[0] ->    data[...]    -> data[n]
*/
typedef struct 
    int data[MAXSIZE];
    int rear, front;
    int num;              /* 队列元素的个数 */
 SeqQueue;

void interface(void);
/* 顺序列表函数声明 */
SeqQueue *initializeSeqQueue();
bool isFullSeqQueue(SeqQueue*);
bool isEmptySeqQueue(SeqQueue*);
void inSeqQueue(SeqQueue*, int);
int outSeqQueue(SeqQueue*);

int main()
    SeqQueue *sq = initializeSeqQueue();
    int flag, number;

    interface();
    for(;;)
        printf("Command: ");
        scanf("%d", &flag);
        switch(flag)
            case 0: printf("Bye!\n"); return 0; break;
            case 1:
                if(isFullSeqQueue(sq))
                    printf("Queue is full!\n");
                else
                    printf("Enter number: ");
                    scanf("%d", &number);
                    inSeqQueue(sq, number);
                
                break;
            case 2:
                if(isEmptySeqQueue(sq))
                    printf("Queue is empty!\n");
                else
                    printf("value: %d\n", outSeqQueue(sq));
                
                break;
        
    

    return 0;


void interface(void)
    puts("+********************+");
    puts("+  0, quit  退出     +");
    puts("+  1, in    入队     +");
    puts("+  2, out   出队     +");
    puts("+********************+");

/* 顺序列表函数实现 */
/* 初始化顺序列表,列表为空,front和read都为-1,num为0 */
SeqQueue *initializeSeqQueue()
    SeqQueue *sq = (SeqQueue*)malloc(sizeof(SeqQueue));
    sq->front = sq->rear = -1;
    sq->num = 0;
    return sq;

/* 判断队列是否为空 */
bool isEmptySeqQueue(SeqQueue *sq)
    if(sq->num==0)
        return true;
    return false;

/* 判断队列是否已满 */
bool isFullSeqQueue(SeqQueue *sq)
    if(sq->num==MAXSIZE)
        return true;
    return false;

/* 入队 */
void inSeqQueue(SeqQueue *sq, int number)
    /* 循环队列,取余MAXSIZE */
    sq->rear = sq->rear+1 % MAXSIZE;
    sq->data[sq->rear] = number;
    sq->num++;

/* 出队 */
int outSeqQueue(SeqQueue *sq)
    sq->front = sq->front+1 % MAXSIZE;
    sq->num--;
    return sq->data[sq->front];

 

以上是关于数据结构——顺序队列(sequence queue)的主要内容,如果未能解决你的问题,请参考以下文章

顺序队列(Sequential Queue)

C/C++数据结构-完整代码队列Queue(顺序存储,链式存储)增删改查

队列(Queue)之顺序存储结构的相关实现(C语言)

C/C++数据结构-完整代码队列Queue(顺序存储,链式存储)增删改查

jQuery源码05 (3653 , 3797) queue() : 队列方法 : 执行顺序的管理

c++ queue 顺序队列的实现