• c/c++线性队列


    线性队列

    队列是先进先出,和栈相反.

    不循环的队列就是浪费空间,如果tail到了最大值后,即使前面出队了,有空的位置,也不能再入队。

    seqqueue.h

    #ifndef __SEQQUEUE__
    #define __SEQQUEUE__
    
    #include <stdio.h>
    #include <malloc.h>
    #include <assert.h>
    #include <memory.h>
    #include <stdbool.h>
    
    #define SEQQUEUE_INIT_SIZE 8
    
    typedef int ElemType;
    
    typedef struct seqqueue{
      ElemType* base;
      int front;
      int tail;
    }seqqueue;
    
    void init(seqqueue*);
    void enQueue(seqqueue*, ElemType);
    void show_list(seqqueue*);
    void deQueue(seqqueue*);
    void clear(seqqueue*);
    void destroy(seqqueue*);
    #endif
    
    

    seqqueue.c

    #include "seqqueue.h"
    
    void init(seqqueue* seq){
      seq->base = (ElemType*)malloc(sizeof(ElemType) * SEQQUEUE_INIT_SIZE);
      seq->front = seq->tail = 0;
    }
    void enQueue(seqqueue* seq, ElemType x){
      if(seq->tail == SEQQUEUE_INIT_SIZE -1){
        printf("queue is full
    ");
        return;
      }
      seq->base[seq->tail++] = x;
    }
    void show_list(seqqueue* seq){
      int i = seq->front;
      while(i <= seq->tail-1){
        printf("%d
    ", seq->base[i++]);
      }
    }
    void deQueue(seqqueue* seq){
      if(seq->front < SEQQUEUE_INIT_SIZE - 1){
        seq->front++;
      }
    }
    void clear(seqqueue* seq){
    
    }
    void destroy(seqqueue* seq){
    
    }
    

    whilequeuemain.c

    #include "seqqueue.h"
    
    int main(){
      seqqueue list;
      init(&list);
      int select = 1;
      ElemType item;
      int index;
      while(select){
        printf("*****************************************
    ");
        printf("*** [1]   push        [2]  pop        ***
    ");
        printf("*** [3]   show_list   [4]  length     ***
    ");
        printf("*** [5]   clear       [6]  destroy    ***
    ");
        printf("*** [0]   quit                        ***
    ");
        printf("*****************************************
    ");
        printf("请选择:>");
        scanf("%d", &select);
        if(0 == select)
          break;
        switch(select){
        case 1:
          printf("请输入要插入的数据>
    ");
          scanf("%d",&item);
          enQueue(&list, item);
          show_list(&list);
          break;
        case 2:
          deQueue(&list);
          show_list(&list);
          break;
        case 3:
          show_list(&list);
          break;
        case 5:
          clear(&list);
          show_list(&list);
          break;
        case 6:
          destroy(&list);
          break;
        default:
          printf("输入的选择错误,请重新选择
    ");
          break;
        }
      }
      //destroy(&list);                                                             
    }
    
    
  • 相关阅读:
    远程连接Ubuntu中的MySQL
    以API 配置的方式来配置你的 Dubbo 应用
    jdk1.8:stream流式分组groupby
    springboot如何通过apollo动态去注册dubbo服务
    JDK动态代理[3]WeakCache缓存的实现机制
    Linq 交集、并集等集合理论学习
    Build my first Blazor app
    关于
    MySql数据库优化维度
    面霸篇:Java 集合容器大满贯(卷二)
  • 原文地址:https://www.cnblogs.com/xiaoshiwang/p/9246462.html
Copyright © 2020-2023  润新知