zoukankan      html  css  js  c++  java
  • 循环队列的实现

    //头文件queue.h
    #pragma once
    #include<assert.h>
    #include<iostream>
    using namespace std;
    typedef int ElemType;
    #define MAX_SIZE 8
    typedef struct Queue
    {
       ElemType *base;
       int front;
       int rear;
       size_t capacity;
    }Queue;
    ///////////////////////////////
    void Init_queue(Queue *Q)
    {
       Q->base = (ElemType *)malloc(sizeof(ElemType)*(MAX_SIZE));
       assert(Q->base != NULL);
       Q->front=Q->rear=0;
       Q->capacity = MAX_SIZE;
    }
    
    bool en_queue(Queue *Q,ElemType x)
    {
    	if((Q->rear+1)%MAX_SIZE == Q->front)
    		return false;
    	Q->base[Q->rear] = x;
        Q->rear =(Q->rear+1) % MAX_SIZE;	
       return true;
    }
    
    bool de_queue(Queue *Q)
    {
      if(Q->rear == Q->front)
    	 return false;
      
      Q->front = (Q->front+1)%MAX_SIZE;
       return true;
    }
    
    void show_queue(Queue *Q)
    {
      if(Q->front == Q->rear)
    	 return ;
      int i=Q->front;
      while(i != (Q->rear))
      {
           cout<<Q->base[i]<<"<-";
    	   i = (++i)%MAX_SIZE;
      }
      cout<<"endl"<<endl;
    }


     

    #include"queue.h"
    
    void main()
    {
      Queue sq;
      Init_queue(&sq);
      en_queue(&sq,1);
      en_queue(&sq,2);
      en_queue(&sq,3);
      en_queue(&sq,4);
      en_queue(&sq,5);
      en_queue(&sq,6);
      en_queue(&sq,7);
      de_queue(&sq);
      en_queue(&sq,8);
      de_queue(&sq);
      en_queue(&sq,9);
      show_queue(&sq);
    }

    注意:循环队列有一个空间用来标记,不存储数据

    分析:首先1,2。3,4。5,6,7入队。此时已满。

               因为1出队,所以8能够入队,又因为2出对所以9能够入队。

     出入队过程:


  • 相关阅读:
    java MessageFormat来生成模板字符串
    linux 用户身份切换
    linux 账号管理
    java 模块化
    mysql 存储过程执行while循环 Lost connection to MySQL server during query
    git 加速
    测试目录
    centos 安装gitblit
    centos7 安装mongoDB
    MySQL 批量修改库、表、列的排序规则,处理数据库大小写不敏感问题。
  • 原文地址:https://www.cnblogs.com/yxwkf/p/5377540.html
Copyright © 2011-2022 走看看