使用结构体定义链栈
typedef struct Node {
int data;
struct Node* next;
}LinkStack;
初始化
void initStack(LinkStack* S) {
S = (LinkStack*)malloc(sizeof(LinkStack));
S->data = 0;
S->next = NULL;
}
这里 笔者取栈顶元素时,使用如下内容,报错
int GetTop(LinkStack S, int* data) {
if (isEmpty(S)) {
return 0;
}
else {
*data = S.next.data;
return 1;
}
}
出现 表达式必须具有结构或联合类型,但它具有类型 "struct Node *" 的报错信息。
原因是因为next是结构体LinkStack类型里的指针成员,指向结构体LinkStack类型,不能对它用圆点运算符。因此应用S.next->data。将栈顶元素取出来。
正确写法
int GetTop(LinkStack S, int* data) {
if (isEmpty(S)) {
return 0;
}
else {
*data = S.next->data;
return 1;
}
}