zoukankan      html  css  js  c++  java
  • 数据结构----队列

    队列 先入先出 FIFO

     如果      rear 等于front      说明当前队列是空的

     如果      Q->rear + 1 整除队列大小 == Q->front  代表队列是满了 没法继续插入了

    #include<stdio.h>

    #include<stdlib.h>

    #include<string.h>

    #define MaxQsize 1000

    #define ERROR -1

    struct      Queue{

             int customer[MaxQsize];            #一个一般的数组

             int rear;                                      #一个表示后的int

             int front;                                     #一个表示前的int

    };

    typedef struct Queue Queue;           #改名字

    Queue * initialQ(){
    Queue *q = NULL;
    q = (Queue *)malloc(sizeof(Queue));
    q->rear = q->front = 0;          #初始化
    return q;
    }

    bool is_emptyq(Queue *Q){      #是否为空
      if(Q->front == Q->rear){
        return true;
      }else{
        return false;
      }
    }

    bool is_fullq(Queue *Q){            #是否为满
      if((Q->rear + 1) % MaxQsize == Q->front){
        return true;
      }else{
        return false;
      }
    }

    void addQ(Queue *Q,int num){
      if(is_fullq(Q)){
        printf("满了,无法添加 ");
        return ;
      }else{
        Q->customer[Q->rear] = num;
        Q->rear = (Q->rear+1) % MaxQsize;            #加一
        printf("添加了%d ",num);
      }
    }


    int deleteQ(Queue *Q){
      int item;
      if(is_emptyq(Q)){
        printf("空的 ");
        return ERROR;
      }else{
        item = Q->customer[Q->front];

        Q->customer[Q->front] = 0;                    #删除后 为0
        Q->front = (Q->front+1) % MaxQsize;   #front加一 
        printf("拿出了%d ",item);
        return item;
       }
    }


    void print_list(Queue *Q){
      int i=0;
      printf("[");
      for(i=0;i<MaxQsize;i++){
        printf("%d,",Q->customer[i]);
      }
      printf("] ");
    }

    int main(){
      int N,i,cur,flag;
      Queue *q1 = initialQ();
      addQ(q1,1);
      addQ(q1,2);
      addQ(q1,3);
      addQ(q1,4);
      print_list(q1);
      deleteQ(q1);
      print_list(q1);
      addQ(q1,5);
      print_list(q1);
      deleteQ(q1);
      print_list(q1);
      addQ(q1,6);
      print_list(q1);
      deleteQ(q1);
      print_list(q1);
      deleteQ(q1);
      print_list(q1);
      deleteQ(q1);
      deleteQ(q1);
      deleteQ(q1);

      return 0;

    }

  • 相关阅读:
    winform 监视DataGridView的滚动条,加载数据
    SQL 自动生成行号
    SQL 删除重复的数据(多个字段判断),只保留一条数据
    C# 一个简单的 工厂模式 例子
    winform 重写TextBox的OnTextChanged方法(事件)
    winform 给文本框加载内容的时候 始终让文本框的滚动条到底(允许显示多行Multiline=True)
    winform 制定DataGridViewTextColumn列(更改DataGridView的Cell的状态很有用)
    winform 使用委托 实现多线程访问控件
    C# 一个简单的递归函数和 两个List<T> 合并
    ADO.NET  把数据库A的某表的数据内容复制到数据库B的某表内
  • 原文地址:https://www.cnblogs.com/hywhyme/p/11571815.html
Copyright © 2011-2022 走看看