【问题标题】:C Linked-List Queue : What should I return when trying to dequeue an empty queue?C Linked-List Queue:尝试使空队列出队时应该返回什么?
【发布时间】:2016-04-11 05:52:20
【问题描述】:

尝试使空队列出队时我应该返回什么?

我的教科书告诉我要返回一个表示错误的“键”。

我试过了:

Element queueEmpty()
{
    Element elem = {'!'};
    printf("Queue is empty");
    return elem;
}

但认为这不是一个好的设计,因为'!'不是错误的唯一表示。

(假设任何 char 数据都可以是有效输入)

我的 Queue ADT & dequeue 函数的完整代码:

typedef struct
{
    char data;
} Element;

typedef struct Node *nodePtr;
typedef struct Node
{
    Element elem;
    nodePtr next;
} Node;

nodePtr front[MAX_QUEUES];
nodePtr rear[MAX_QUEUES];





Element dequeue(int i)
{
    Element elem;
    nodePtr temp = front[i];
    if(!front[i])
    {
        return queueEmpty();
    }
    elem = temp->elem;
    front[i] = temp->next;
    free(temp);
    return elem;
}

仅供参考:我的教科书是:Horowitz、Sahni、Anderson-Freed 撰写的“C 语言数据结构基础”

【问题讨论】:

  • 如果...:'!'不是错误的唯一表示。”,那么也许你知道一些那是。当我们甚至不知道@时,我们怎么知道那会是什么?除非您这么说,否则 987654323@ 是不可接受的?

标签: c error-handling queue


【解决方案1】:

为什么不返回一个整数并使用指针作为附加输出,如下所示:

int dequeue (int i, Element *elem)
{
nodePtr temp = front[i];
if(!front[i])
{
    return -1; // Error parttern
}
*elem = temp->elem;
front[i] = temp->next;
free(temp);
return elem;
}

调用:

Element elem;
if(dequeue(i,&elem) == -1)
{
 // Queue was empty
}
else
{
 // do what you want to do
}

【讨论】:

    【解决方案2】:

    您可以尝试两件事:

    1. 返回无效的Element。在这种情况下,用户需要检查返回的元素是否有效。
    2. 当用户尝试对空队列调用出队操作时,抛出一个exception

    我个人会推荐第二种方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-01
      • 1970-01-01
      相关资源
      最近更新 更多