我有一个问题,了解如何使用队列

时间:2013-03-21 03:28:20

标签: c++

下面是我的数据结构类的教授幻灯片之一,我一直在做研究,无法弄清楚这里的概念,我必须在我的数据结构类中用这个构建一个程序。

.back做什么?我们发送到下面的实际功能是什么: 请解释,就像我6岁......

ADT-Queue(工具包函数数组实现)

//Create a q.
void create_queue(Queue & q)
{
    q.back = -1;
}

//check if Queue is empty
int empty( const QUEUE & q)
{
    return (q.back == -1);
}

//Purge elements in the queue
void purge(Queue & q)
{
    q.back = -1;
}

//Add an element on the q.
void enq(Queue & q, CONST INFOREC & item)
{
    ++ q.back;
q.i[q.back] = item; // i is an array of ints previously declared
}

// delete an item from the q
void deq(Queue &q, INFOREC & item)
{
    int ct; 
    item =q.i[0]; front;
    // step forward loop, moving the entire array components 1 place forward and
    // shifting the pointers
    for (ct = 1; ct < q.back; ++ct);
    q.i[ct -1] = q.i [ct];  
    --q.back;
 }

3 个答案:

答案 0 :(得分:1)

已编辑以反映问题中提供的新信息。

back是指向队列中最后一个元素的指针,即最近添加的元素。

i一起,这是维护其内部数据结构所需的所有队列。由于静态分配i并且仅使用back对元素进行索引,因此不必显式删除队列中的元素;这就是ipurge()无需进行任何更改的原因。如果添加元素purge()deq(),然后添加更多元素,新元素只会覆盖内存中的前一个元素,这正是您想要的;并且由于back在每种方法中都得到了适当的调整,因此即使它们仍然存在于系统内存中,也无法访问不再是逻辑上在队列中的数据成员。

请注意deq中的“de”不代表“删除”; deq是“dequeue”的缩写,“dequeue”是从队列中检索最旧元素的标准术语。将元素添加到队列后面的相应术语是“enqueue。”

答案 1 :(得分:1)

队列的前面是0,后面是q.back,所以当队列为空时q.back被初始化为-1。

检查队列是否为空,如果返回为-1则返回true,否则为false:

bool empty(const Queue & q)
{
    return (q.back == -1);
}

purge使队列再次为空,因此与init相同。

答案 2 :(得分:0)

好吧我的猜测是,ADT的设计方式是Queue总是指向添加的第一个元素,当队列中没有元素时back总是-1。

检查create_queue,创建了一个新队列,但尚未启用任何元素,因此将back初始化为-1

同样empty,如果没有元素,back仍然是-1

purge中,删除了所有元素,因此需要将back更新为-1

因此,如果有一个名为enqueue的函数.. back将更新为 -1

的值

P.S: - 这是一个疯狂的猜测,因为我们无法预测,直到我们看到完整的代码:)

*编辑*** 根据更新的代码,我建议工作正常,如果队列为空,则返回-1;否则它是一个从0到n-1(max_queue_size)的数组... 0 - &gt;第一个元素