下面是一个栈的基本的创建,相信有部分人会有疑问
typedef struct StackNode{
int data;
struct StackNode *next;
} StackNode , *LinkStackPtr;
typedef struct {
LinkStackPtr top;
int count;
} LinkStack;
int InitStack(LinkStack *S) {
S->top = (LinkStackPtr)malloc(sizeof(StackNode));
if (S->top == NULL) {
return -1;
}
S->top = NULL;
S->count = 0 ;
return 1;
}
int main(int argc, const char * argv[]) {
LinkStack S;
int a = InitStack(&S);
return 0;
}
上面是一个栈的创建,关于下面这块代码好多人应该有疑问,我确定你的结构体要从新学习了
1、 S->top = (LinkStackPtr)malloc(sizeof(StackNode));
2、 if (S->top == NULL) {
3、 return -1;
4、 }
5、 S->top = NULL;
其实这几行的代码很简单就是先创建一个栈的头,然后让栈顶部指针top指向NULL,为啥1行后直接第五行了,很简单,一句话,就是我结构体的首个元素地址就是结构体地址,外部已经有了一个S指向保存了,所以里面的这个可以直接直为NULL。
说明:其实这个也是好多设计可以链表中的节点可以储存不同的数据,只需要拿到结构体的首元素的地址就可以了。