C语言和队列/链接列表

时间:2015-09-27 21:17:22

标签: c linked-list queue

有人可以解释下面的代码。我是C的新手并试图弄明白。为什么我们最后有queueNodeT?

highlight.js

2 个答案:

答案 0 :(得分:0)

让我们逐个分解。

此行只是告诉您queueElementT在此定义为char。这意味着你可以写queueElementTchar,两者都可以。

typedef char queueElementT;

现在这是实际的struct。它包含两个变量,即它所持有的元素,在本例中为char。然后它还会告诉queue中的下一个元素。

typedef struct queueNodeTag {
    queueElementT element;
    struct queueNodeTag *next;
} queueNodeT;

更多内容可以在this回答中阅读。

示范:

int count (queueNodeTag q) {
    int i = 0;

    if (q == null) {
        return 0;
    }

    if (q.next == null) {
        return 1;
    }

    while (q.next != null) {
        q = q.next;
        i++;
    }

    return i;   
}

要处理的三个案件。

  1. qnullqueue为空。返回0。
  2. q.nextnullqueue仅包含一个元素。返回1.
  3. 重复,直到q.nextnull分开,然后逐步增加i。我的更好的名字可能是elements或类似的东西。
  4. 此代码未经测试,因为我目前没有C编译器。有一个可用的人可能会验证没有错误吗?

答案 1 :(得分:0)

queueNodeT是typedef语句尝试创建的类型的名称。

另一种指定方法是:

struct queueNodeTag {
    ...
};
typedef struct queueNodeTag queueNodeT;

在C(对比C ++)中," struct queueNodeTag"只定义一个名为" queueNodeTag"的结构。在C ++ [你应该到达那里],这也将定义一个名为" queueNodeTag"

的类型

在为结构创建指针变量时,它的使用时间稍短:

queueNodeT *my_pointer;

比:

struct queueNodeTag *my_pointer;

尾随" T"只是一种编码惯例,表示它是一个类型名称,而不是一个变量。你可以使用别人。我的是:

struct mystructname {
    ...
};
typedef struct mystructname mystructname_t;
typedef mystructname_t *mystructname_p;

使用mystructname_p,您可以更改:

struct mystructname *my_pointer;
mystructname_t *my_pointer;

成:

mystructname_p my_pointer;

" _t"很常见" _p"事情是我的惯例,但是,我相信其他约定将类型的指针定义为" p< Mytype>",例如" pMystructName"。我更喜欢使用后缀[和"蛇案例"符号而不是骆驼驼峰"你的例子中的符号]。