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];
    }
  • 相关阅读:
    Java基础——原码, 反码, 补码 详解
    为什么Java byte 类型的取值范围是-128~127
    JAVA 各种数值类型最大值和最小值 Int, short, char, long, float,&nbs
    JDK config
    为什么要设置Java环境变量(详解)
    什么是JAR包?
    如何用python将一个时间序列转化成有监督学习
    ImportError: numpy.core.multiarray failed to import
    搭建SDN网络——mininet
    回溯法解决最大团问题
  • 原文地址:https://www.cnblogs.com/noonjuan/p/11493507.html
Copyright © 2011-2022 走看看