下面是我的数据结构类的教授幻灯片之一,我一直在做研究,无法弄清楚这里的概念,我必须在我的数据结构类中用这个构建一个程序。
.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;
}
答案 0 :(得分:1)
已编辑以反映问题中提供的新信息。
back
是指向队列中最后一个元素的指针,即最近添加的元素。
与i
一起,这是维护其内部数据结构所需的所有队列。由于静态分配i
并且仅使用back
对元素进行索引,因此不必显式删除队列中的元素;这就是i
内purge()
无需进行任何更改的原因。如果添加元素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;第一个元素