2013-03-21 48 views
0

下面是我的教授幻灯片,我的数据结构类的一种工作,我一直在做研究,不能在这里弄清楚概念,我在此建立一个程序的问题,我数据结构类。我有了解如何与队列

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

ADT-队列(工具包功能的数组实现)

//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

请问您能正确格式化您的代码吗? – Patashu 2013-03-21 03:30:38

+0

您似乎在该代码中有一些未标记的注释...还有一些案例问题:是否应将“QUEUE”和“Queue”等同起来? – 2013-03-21 03:30:38

+1

你有更多的代码示例和/或幻灯片吗? – 2013-03-21 03:33:44

回答

0

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

检查create_queue,创建一个新的队列,而没有单元还enqued并且因此初始化back为-1

同样empty,如果不存在任何元素back将仍然-1

purge ,所有的元素被删除,因此back需要更新到-1

所以如果有一个函数名为enqueue .. back将被更新为一个值,它是不-1

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

*编辑*** 按照更新的代码工作正常,后面将是 - 1如果队列为空... else其数组指向0到n-1(max_queue_size)... 0 - >第一个元素

+0

这是你需要的代码的其余部分?这是前一张幻灯片。对不起,我现在才意识到它... – delgadough 2013-03-21 03:49:53

+0

'typedef int INFOREC; Struct QUEUE { INFOREC i [30]; int back; }; QUEUE q; //q.back是5位置或下标' – delgadough 2013-03-21 03:50:37

+0

更新了答案,根据您的更新代码:-) – NirmalGeo 2013-03-21 04:03:06

1

编辑,以反映新在问题中给出的信息。

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

连同i,这是所有的队列需要保持其内部数据结构。由于i是静态分配的,并且元素只使用back进行索引,所以不需要显式地从队列中删除元素;这就是为什么ipurge()之内不需要改变。如果你添加元素,它们是purge()deq(),然后添加更多元素,新元素只是覆盖内存中的前一个元素,这正是你想要的;并且由于back在这些方法的每个方法中进行了适当调整,所以无法访问不在逻辑上位于队列中的数据成员,即使它们仍存在于系统内存中。

注意“德”在deq并不代表“删除”; deq是“出列”的缩写,它是从队列中检索最旧元素的标准术语。将元素添加到队列后面的相应术语是“入队”。

+0

谢谢凯尔。那个更好吗? – delgadough 2013-03-21 03:39:19

+0

为什么我们假设它是一个指向最后一个元素的指针? – delgadough 2013-03-21 03:42:26

+0

我以为它只是因为它被称为'back'而不是'front'。尽管如此,我意识到逻辑中没有任何东西可以表明这一点。 – 2013-03-21 16:10:26

1

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

检查队列为空应该返回true时回为-1,否则返回false:

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

净化使得队列再次空的,所以是一样的初始化。

+0

为什么我们总是减去1来表示它是数组的开始或“0”我们从中减去1是什么? – delgadough 2013-03-21 03:45:08

+2

-1是一个数字。没有减法。 – stark 2013-03-21 03:45:48

+0

aaaahhh谢谢stark – delgadough 2013-03-21 03:59:38