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];
    }
  • 相关阅读:
    票房和口碑称霸国庆档,用 Python 爬取猫眼评论区看看电影《我和我的家乡》到底有多牛
    用 Python 写个七夕表白神器
    3. GC复制算法
    一个粗糙的RPC框架设计思路
    503Service Unavailable
    centos 7.8下载地址
    海康摄像头SDK在Linux、windows下的兼容问题(二)已解决
    海康摄像头SDK在Linux、windows下的兼容问题
    二重指针
    【JavaScript 对象03】
  • 原文地址:https://www.cnblogs.com/noonjuan/p/11493507.html
Copyright © 2011-2022 走看看