精华内容
下载资源
问答
  • 循环队列满条件

    千次阅读 2016-09-03 19:25:37
    意思就是说,循环队列留了一个元素空间,即当maxsize=100的时候,实际能存的数据只有99个,留一个不存的目的就是用来区分队列空还是。因为空的时候q.rear=q.front,而的时候就变成了(q.rear+
    严蔚敏的数据结构书上63页倒数第二段定义了判定队列空间是空还是满的方法:少用一个元素空间,判定队列呈“满”状态的标志是“队列头指针在队列尾指针的下一位置上(指环状的下一位置)”
     
    意思就是说,循环队列留了一个元素空间,即当maxsize=100的时候,实际能存的数据只有99个,留一个不存的目的就是用来区分队列空还是满。因为空的时候q.rear=q.front,而满的时候就变成了(q.rear+1)%maxsize=q.front。
     
    如果判定条件是q.rear%maxsize=q.front,就是判定头指针和尾指针是否在同一个位置上
    如果判定条件是(q.rear+1)%maxsize=q.front,就是判定头指针在尾指针的下一个位置上
    其他还有设置标记位的方法
    展开全文
  • 判断循环队列是满还是空

    千次阅读 2013-10-28 00:06:20
    判断一个循环队列是满还是空的方法: 方法一:设置一个标志tag,当每一次入队的时候,令tag = 1;当出队的时候,tag = 0;所以,如果在tag = 1后,Q.front = Q.rare,则说明是因为插队而引起的,所以是因为队列了;...

    判断一个循环队列是满还是空的方法:

    方法一:设置一个标志tag,当每一次入队的时候,令tag = 1;当出队的时候,tag = 0;所以,如果在tag = 1后,Q.front = Q.rare,则说明是因为插队而引起的,所以是因为队列满了;反之,tag = 0时,Q.front = Q.rare,则说明是因为出队引起的,由此判断是队列空了;

    方法二:用两个定义区分对列是满的还是空的,定义当Q.front = Q.rare时,表示队列空了;定义当Q.front = (rare + 1)%SIZE 或(front == -1 &&rare = SIZE -2)时是满的,也就是front指向队头,rare指向队尾,front在rare的下一位置即环状位置的下一个位置,这样下来实际使用的空间是SIZE – 1;

    方法三:很简单的方法,就是记一下进入队列的数number,当进入的个数 = SIZE则说明是满的,当进入个数 = 0,则是空的;

     

    展开全文
  • 队列满时:(rear+1)%maxSize= =front 不少一个存储位置时:加一个标志flag或者计数的count 入队时flag=true 出队时flag=false 队:rear= =front&flag 队空:rear= =front&!flag 开始时count=0 入队时:...

    少一个存储位置的
    队列为空时:rear= =front
    队列满时:(rear+1)%maxSize= =front

    不少一个存储位置时:加一个标志flag或者计数的count
    入队时flag=true
    出队时flag=false
    队满:rear= =front&flag
    队空:rear= =front&!flag


    开始时count=0
    入队时:count++
    出队是:count–
    队满:rear ==front &&count=maxsize
    队空:rear ==front&&count=0;

    展开全文
  • 循环队列

    万次阅读 多人点赞 2018-10-31 18:25:58
    循环队列出现的原因 :顺序队列出队后 的空间不能再次利用,造成资源浪费。所以出现循环队列 这个代码是用tag标记的循环队列 思路:(rear+1)%m==front 则队列,(front+1)%m == rear则队列空。队列开始为空,设...

    循环队列出现的原因

    :顺序队列出队后 的空间不能再次利用,造成资源浪费。所以出现循环队列

    这个代码是用tag标记的循环队列

    思路:(rear+1)%m==front 则队列满,(front+1)%m == rear则队列空。队列开始为空,设tag=0。

    简单的说就是front 追 rear 如果追上就是空队列

    然后rear如果追上front 就是满队列

    当 tag == 1且 front == rear 时队满

    当tag == 0 且front == rear 时队空

    #include<iostream>
    #include<stdio.h>
    #include<stdlib.h>
    using namespace std;
    typedef char QElemType;
    #define MAXQSIZE		10
    typedef struct {
    	QElemType *elem;
    	int tag;
    	int front;
    	int rear;
    }CircleQueue;
    int InitCircle(CircleQueue &Q)
    {
        Q.elem = (QElemType *)malloc(MAXQSIZE * sizeof(QElemType));
        Q.front = 0;
        Q.rear = 0;
        Q.tag = 0;
        return 1;
    }
    int ClearCircleQueue(CircleQueue &Q) //清空
    {
        Q.front = 0;
        Q.rear = 0;
        Q.tag = 0;
        return 0;
    }
    int DestoryCircleQueue(CircleQueue &Q)//销毁
    {
        free(Q.elem);
        Q.elem = NULL;
        return 1;
    }
    int CircleQueueLength(CircleQueue Q)//判断长度
    {
        return (Q.rear - Q.front + MAXQSIZE) % MAXQSIZE;
    }
    
    int EmptyCircle(CircleQueue Q) //判空
    {
        if(Q.rear == Q.front && Q.tag == 0)
    	 return 1;
        return 0;
    }
    int EnQueue(CircleQueue &Q, QElemType e) //入队
    {
    	if(Q.tag == 1)
    	return 0;
    	Q.elem[Q.rear] = e;
    	Q.rear = (Q.rear + 1) % MAXQSIZE;
    	if(Q.rear == Q.front)
    	Q.tag = 1;
    	return 1;
    }
    int DeQueue(CircleQueue &Q, QElemType &e)//出队
    {
    	if(Q.rear == Q.front && Q.tag == 0)
    	 return 0;
    	 e = Q.elem[Q.front];
    	 Q.front = (Q.front + 1) % MAXQSIZE;
    	 if(Q.front == Q.rear)
    	 Q.tag = 0;
    	 return 1;
    }
    
    int ShowCircleQueue(CircleQueue Q)//显示
    {
        if(Q.rear == Q.front && Q.tag == 0)
        {
            return 0;
        }
        while(1)
        {
            printf("%c ", Q.elem[Q.front]);
            Q.front = (Q.front + 1) % MAXQSIZE;
            if(Q.front == Q.rear)
                break ;
        }
        return 1;
    }
    
    void help()
    {
    
        cout << "1~~~~~初始化循环队列" <<endl;
        cout << "2~~~~~清空循环队列" << endl;
        cout << "3~~~~~销毁循环队列" << endl;
        cout << "4~~~~~循环队列长度" << endl;
        cout << "5~~~~~循环队列是否为空" << endl;
        cout << "6~~~~~入队" << endl;
        cout << "7~~~~~出队" << endl;
        cout << "8~~~~~显示队列元素" << endl;
        cout << "      输入非正数退出" << endl;
    }
    
    int main ()
    {
        CircleQueue Q;
        help();
        int operate_code;
        char e;
        while(1)
        {
        	cin>>operate_code;
        	if(operate_code == 1)
        	{
        		InitCircle(Q);
    		}
    		if(operate_code == 2)
    		{
    			ClearCircleQueue(Q);
    		}
    		if(operate_code == 3)
    		{
    			DestoryCircleQueue(Q);
    		}
    		if(operate_code == 4)
    		{
    			int len = CircleQueueLength(Q);
    			cout<<"队列的长度为 = " << len;
    		}
    		if(operate_code == 5)
    		{
    			if( EmptyCircle(Q) )
    			printf("队列为空\n");
    			else
    			printf("队列非空\n"); 
    		}
    		
    		if(operate_code == 6)
    		{
    			cout << "请输入你要入队的元素: " << endl;
    			cin >> e; 
    			if(EnQueue(Q, e))
    			{
    				cout << "入队成功" << endl;
    			}
    			else
    			{
    				cout << "入队失败" << endl;
    			} 
    		}
    		if(operate_code == 7)
    		{
    			if(	DeQueue(Q, e))
    			{
    				cout << "出队成功,队首元素为 = " << e << endl; 
    			}
    			else
    			cout << "队列为空,队内无元素 "<<endl;
    		
    		} 
    		if(operate_code == 8)
    		{
    			ShowCircleQueue( Q);
    		}
        	if(operate_code <= 0)
        	break;
    	}
    	return 0;
    }
    

     

    展开全文
  • 什么是循环队列

    2021-03-23 11:40:05
    对于队列最好的方法是使用链表实现,因为对于数组来说,队列可能会出现下面...理解循环队列何谓循环队列?首先我们要说明的是循环队列仍然是基于数组实现的。但是为了形象化的说明问题,我们如下图所示  1.图...
  • C语言之循环队列判断与空

    千次阅读 2017-03-23 08:23:54
    因此,我们无法通过front=rear来判断队列“空”还是“”。 注:先进入的为‘头’,后进入的为‘尾’。 解决此问题的方法至少有三种: 其一是另设一个布尔变量以匹别队列的空和; 其二是少用一个元素的空间,约定...
  • 循环队列判断与空

    千次阅读 2013-09-22 00:08:32
    因此,我们无法通过front=rear来判断队列“空”还是“”。 注:先进入的为‘头’,后进入的为‘尾’。 解决此问题的方法至少有三种: 其一是另设一个布尔变量以匹别队列的空和; 其二是少用一个元素...
  • 循环队列的判断

    万次阅读 2018-03-23 21:06:28
    第二种方法是我们修改条件,保留一个元素空间,也就是说,数组中还有一个空闲单元时,我们就认为这个队列已经了。接下来我们重点讨论第二种方法,由于rear可能比front大,也可能是比front小,所以尽管他们只相差一...
  • 循环队列的一些基本操作 void InitQueue(SqQueue &Q) { // 构造一个空队列Q Q.base = (QElemType *)malloc(MAX_QSIZE*sizeof(QElemType)); if (!Q.base) // 存储分配失败 exit(OVERFLOW); Q.front = Q....
  • JAVA循环队列

    千次阅读 2017-09-15 15:25:44
    关于自定义循环队列的实现原理和要点可以参见之前的博文系列:循环队列及C语言实现。这里主要对JAVA下的具体实现方式与原理进行说明。 一、JAVA 中已经自带了 Queue、DQueue、ArrayList、LinkedList 等常用的数据...
  • 循环队列中判断队与队空

    万次阅读 多人点赞 2016-04-02 11:16:38
    在引用循环队列前,我们需要了解队列是如何线性实现的。 简单地讲,便是当队列为空时,front = rear = 0,每当插入元素尾...我们可以发现,当循环队列属于上图的d1情况时,是无法判断当前状态是队空还是队。为了
  • 队列实现循环队列

    千次阅读 2018-04-20 21:53:40
    二、实验内容仿照资料中顺序循环队列的例子,设计一个只使用队头指针和计数器的顺序循环队列抽象数据类型。其中操作包括:初始化、入队列、出队列、判断队列是否非空。编写主函数,验证所设计的顺序循环队列的正确性...
  • 循环队列:头尾相接的顺序存储成为循环队列满队列的判断 办法一:设置一个标志flag,当front == rear 且 flag = 0 为空队列当 front == rear 且 flag = 1 为队列(烦琐) 办法二: 队列时,数组中还存在一个...
  • 循环队列和判空的两种方式

    千次阅读 2019-05-18 09:31:00
    循环队列中,Q.front表示对头,Q.rear表示队尾。因为队列大小是有限的,所以在队列指针移动的时候,会出现到头的情况,这时候需要指针回到起点。 所以入队时Q.rear=Q.rear+1%Maxsize,出队时,Q.front=Q.front+1%...
  • 在引用循环队列前,我们需要了解队列是如何线性实现的。 简单地讲,便是当队列为空时,front = rear = 0,每当插入元素尾指针+1,...我们可以发现,当循环队列属于上图的d1情况时,是无法判断当前状态是队空还是队
  • 准备写队列以下几种类型:循环队列(顺序结构),链队列,循环队列(只有尾指针),字符队列(顺序结构) 一、循环队列循环队列存储结构typedef int QElemType; typedef struct{ QElemType *base; int front; int...
  • 循环队列–C语言实现–数据结构

    万次阅读 多人点赞 2017-06-22 16:36:45
    循环队列–C语言实现–数据结构目录循环队列C语言实现数据结构目录 一 要求 二 循环队列循环队列的算法设计 1 建立循环队列 2 置空队列 3 入队 4 出队 5 打印队 四 程序 1 程序的结构 2 程序源码 五 程序测试 1 ...
  • 在引用循环队列前,我们需要了解队列是如何线性实现的。    (纠错:上图中出队列应该是:x=sq[front++])简单地讲,便是当队列为空时,front = rear = 0,每当插入元素尾指针+1,删除元素是头指针-1。但是,我们会...
  • 试着给出该循环队列的队空条件和队满条件,并写出相应的入队(enQueue)和出队(deQueue)的操作。 分析 本题和普通的循环队列是不一样的,普通的循环队列是有两个指针的,即队头指针front和队尾指针rear,而本题...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 70,769
精华内容 28,307
关键字:

循环队列q满队列的条件是