• 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);                                                             
    }
    
    
  • 相关阅读:
    专利申请流程
    安装Fedora16与Windows7共存双系统
    rpm检查依赖性
    C++中的static函数和extern关键字
    asp.net 浏览服务器文件
    如何用批处理文件写:获取当前日期的前一天
    有一个无效 SelectedValue,因为它不在项目列表中。
    .net 4.0 检测到有潜在危险的 Request.Form 值。
    ckeditor 在C#中使用
    使用任务计划程序自动执行任务
  • 原文地址:https://www.cnblogs.com/xiaoshiwang/p/9246462.html
Copyright © 2020-2023  润新知