谁能解释一下下面的代码?我是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
让我们一步一步来分析。
这一行简单地告诉您queueElementT
在这里被定义为char
。这意味着你可以写queueElementT
或char
,两者都可以。
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;
}
要处理三种情况
-
q
为null
,queue
为空。返回0。 -
q.next
是null
,queue
只包含一个元素。返回1。 - 重复直到
q.next
从null
分离,增加i
。更好的名字可能是elements
或类似的东西。
此代码未经测试,因为我目前手头没有C编译器。谁有一个可用的,也许可以验证没有做错?