zoukankan      html  css  js  c++  java
  • 队列的 基本操作

    一.原理与方法    循环队列的 插入与  删除

    二..程序清单

    三.思考

    1. 如果循环队列的下标不是从0开始,而是是从1开始,那么头指针加l 的操作应如何修改?

    2. 在循环队列中判断队空和队满的条件能否一样,为什么?

    3. 用另一种不同与上面算法的方法解决“假上溢”问题。

     

    #include<stdio.h>
    # include "stdlib.h"
    # include "stdio.h"
    # include "time.h"
    
    //函数结果状态代码
    # define  TURE  1
    # define  FALSE 0
    # define  OK  1
    # define  ERROR 0
    # define  OVERFLOW -2
    # define  maxqsize 100
    
    typedef int status;
    typedef int qelemtype;
    typedef struct{
       qelemtype *base;
       int front;
       int rear;
    }sqqueue;
    
    //----------循环队列的基本操作的算法描述--------
    status initqueue(sqqueue &Q){
      //构造一个空队列Q
      Q.base=(qelemtype*)malloc(maxqsize*sizeof(qelemtype));
      if(!Q.base)  return ERROR;
      Q.front=Q.rear=0;
      return OK;
    }
    
    int queuelength(sqqueue Q){
      //返回Q的元素个数,即对列的长度
      return (Q.rear-Q.front+maxqsize)%maxqsize;
    }
    
    status enqueue(sqqueue &Q,qelemtype e){
      //插入元素e为Q的新的队尾元素
      if((Q.rear+1)%maxqsize==Q.front) return ERROR; //队列满
      Q.base[Q.rear]=e;
      Q.rear=(Q.rear+1)%maxqsize;
      return OK;
    }
    
    status dequeue(sqqueue &Q,qelemtype &e){
      //若队列不空,则删除Q的队头元素,用e返回其值,并返回OK
      //否则返回ERROR
      if(Q.front==Q.rear) return ERROR;
      e=Q.base[Q.front];
      Q.front=(Q.front+1)%maxqsize;
      return OK;
    }
    
     int main()
     {
      //测试基本操作
      int i,e;
      sqqueue Q;
      initqueue(Q);
      printf("
    ");
      for(i=1;i<=10;i++)
        {
         e=i;
         enqueue(Q,e);
        }
    
      printf("the Length of queue is :%d
    ",queuelength(Q));
    
      for(i=1;i<=10;i++)
        {
         dequeue(Q,e);
         printf(" %d",e);
        }
     }
  • 相关阅读:
    今日总结
    今日总结
    今日总结
    本周总结
    今日总结
    今日总结
    今日总结
    今日总结
    今日总结
    vue3函数setUp和reactive函数详细讲解
  • 原文地址:https://www.cnblogs.com/java2016/p/7636177.html
Copyright © 2011-2022 走看看