C语言和队列/链表



谁能解释一下下面的代码?我是C语言的新手,正在摸索。为什么我们在末尾有queuendet ?

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

queuendet是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",例如"pMystructName"。我更喜欢使用后缀来表示[和"蛇形"符号,而不是您示例中的"驼峰"符号]。

让我们一步一步来分析。

这一行简单地告诉您queueElementT在这里被定义为char。这意味着你可以写queueElementTchar,两者都可以。

typedef char queueElementT;

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

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

在这个回答中可以读到更多。

示范:

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. qnull, queue为空。返回0。
  2. q.nextnull, queue只包含一个元素。返回1。
  3. 重复直到q.nextnull分离,增加i。更好的名字可能是elements或类似的东西。

此代码未经测试,因为我目前手头没有C编译器。谁有一个可用的,也许可以验证没有做错?

相关内容

  • 没有找到相关文章

最新更新