关于栈中结构体的理解和栈的拓展

1,269 阅读1分钟

下面是一个栈的基本的创建,相信有部分人会有疑问


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。


说明:其实这个也是好多设计可以链表中的节点可以储存不同的数据,只需要拿到结构体的首元素的地址就可以了。