【问题标题】:how to write a c function which creates an empty queue?如何编写一个创建空队列的c函数?
【发布时间】:2011-09-28 19:28:09
【问题描述】:

我是 C 新手。我不知道如何编写一个 C 函数来创建一个空队列并返回一个 void 指针。

void* queue_open(void)

我还想知道如何编写一个将元素放在队列末尾的 C 函数。

void queue_put(void *p, void *elementp)

感谢您的帮助!

【问题讨论】:

  • 这是作业吗?你的参考资料对实现链表有什么看法?
  • 是的,这是我的作业。基本上就像我创建一个购物清单以从键盘获取条目。每个条目由要购买的商品(字符串)和要购买的商品数量(int)组成。输入所有商品后,打印购物清单,从队列中删除所有条目,关闭队列。家里的工作就像我们使用模块化编程一样,比如函数创建一个空队列。我使用 queue_open 和 queue_put 等函数完成了主要功能。现在,我不知道如何编写这些函数。
  • 你在课堂上学到了什么?你有参考资料吗?教科书?当然你可以在网上找到链表代码。
  • 我正在学习基于实验室的编程课程,没有教科书。每周都有一个作业(编码主题)。我必须自学。
  • 不确定 TDD。当然,在此之前您需要学习基础知识!

标签: c queue linked-list


【解决方案1】:

如果您来自面向对象的背景(正如您的方法签名似乎表明的那样)。

面向对象的想法 -> 在 C 中实现它的好方法

对象创建 -> malloc 一个结构体,然后将其传递给一个初始化函数

struct queue* q = (struct queue*)malloc(sizeof(struct queue));
queue_initialize(q);

如果你愿意,你可以把它包装在一个函数中,像这样

struct queue* queue_construct() {
  struct queue* q = (struct queue*)malloc(sizeof(struct queue));
  queue_initialize(q);
  return q;
}

请注意,这些指针不应指向 void*,让 C 至少为您做一些类型检查。

实现一个方法 -> 创建一个函数,该函数将结构指针指向“几乎这个”结构。

struct user* user = ... whatever we do here ...;
queue_add(q, (void*)user);

至于如何实际实现队列,我建议一本好的数据结构或算法书籍,因为有很多方法可以解决;而且,您选择的具体技术将对性能和可靠性产生不同的影响。没有一种最好的方法,这在很大程度上取决于队列的使用方式以及性能的哪些方面更重要。

我推荐的书是Introduction to Algorithms。这本书对于大多数情况来说都是多余的,它非常详细地列出了您在编程最初几年可能遇到的几乎所有主要数据结构。因此,它提供了很好的参考,尽管它尝试了一种语言中立的方法,与常见的编程语言相比,现在看起来很奇怪。

一旦您了解发生了什么,您几乎可以用任何语言进行操作。

【讨论】:

    【解决方案2】:

    您需要确定队列元素的外观、队列是什么以及队列为空意味着什么。如果你知道这些,写queue_open 和queue_put 应该很容易。我建议您首先定义一个代表队列元素的结构。

    【讨论】:

    • 这是我的结构: typedef struct item { int num;字符名称[MAXSTR]; } 项;
    • 那可能是你队列中的一个元素,但是是什么让它成为队列呢?队列中两个连续元素之间的关系是什么,您打算如何创建这种关系?这里有一个提示:可以实现队列的两个基本结构是链表和数组。
    • 对。如果您使用的是链表,那么每个项目都需要一个 next 指针,而指向队列的指针只是指向第一个元素的指针。如果使用数组,则不需要 next 指针,但必须预先分配项数组,并且需要一种方法来记住哪个项是第一个项以及队列中当前有多少项。
    【解决方案3】:

    您可以在此处了解队列:

    http://en.wikipedia.org/wiki/Queue_(data_structure)

    虽然您可以轻松地从上面的链接复制和粘贴示例代码,并且只需稍加修改即可解决您的作业问题,但您不会通过这样做学到很多东西。

    在从概念上理解队列之后,我建议您尝试自己实现它,然后在卡住时使用上面链接中的示例代码作为参考。

    您能做的最好的事情就是与班上另一个比您聪明的学生配对。然后与他/她配对程序(http://en.wikipedia.org/wiki/Pair_programming)来解决问题。你会成为一个更好的程序员。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-02
      • 2013-11-15
      • 2010-10-04
      • 1970-01-01
      相关资源
      最近更新 更多