zoukankan      html  css  js  c++  java
  • 数据结构——顺序队列(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!
    "); return 0; break;
                case 1:
                    if(isFullSeqQueue(sq))
                        printf("Queue is full!
    ");
                    else{
                        printf("Enter number: ");
                        scanf("%d", &number);
                        inSeqQueue(sq, number);
                    }
                    break;
                case 2:
                    if(isEmptySeqQueue(sq))
                        printf("Queue is empty!
    ");
                    else{
                        printf("value: %d
    ", 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];
    }
  • 相关阅读:
    js克隆
    一些笔试题
    js的严谨模式
    Docker之Compose服务编排
    最近5年183个Java面试问题列表及答案[最全]
    Rancher概述
    迭代器和生成器
    Prometheus 安装
    Prometheus 介绍
    装饰器函数
  • 原文地址:https://www.cnblogs.com/noonjuan/p/11493507.html
Copyright © 2011-2022 走看看