栈的链表实现

来源:互联网 发布:动易cms后台登录密码 编辑:程序博客网 时间:2024/05/01 07:44

栈的原理是后进先出,看懂未必能真正理解,理解了未必能写出来,写出来的未必能运行,所以动手写写还是有必要的。

写完修改了好一会才运行起来。

一是 结构体的2种定义方式搞不清了。

二是 指针的使用

三是  malloc一个结构体,和 java 搞混了 ,居然写成new抓狂




struct StackNode{
 int data;
 struct StackNode *link;
};


struct LinkStack{
 struct StackNode* top;
 int size;
};
void initStack(struct LinkStack *s){
    if(s == NULL){
        return;
    }
    s->top = NULL;
    s->size = 0;


}
int stackEmpty(struct LinkStack *s){
    if(s->size == 0){
        return 0;
    }
    return -1;
}
int getTop(struct LinkStack *s){
    if(s != NULL && s->size > 0){
        return s->top->data;
    }
}


int push(struct LinkStack *s,int data){
    if(s == NULL){
        return -1;
    }
    struct StackNode* newNode = (struct StackNode*)malloc(sizeof(struct StackNode));
    if(newNode == NULL){
        return -1;
    }
    newNode->data = data;
    newNode->link = s->top;
    s->top = newNode;
    s->size ++;
    return 0;
}


int pop(struct LinkStack *s,int *val){
    if(s == NULL){
        return -1;
    }
    if(s->size == 0){
        return -1;
    }
    
    struct StackNode* topNode = s->top;
    if(topNode != NULL){
        s->top = topNode->link;
        s->size --;
        *val = topNode->data;
        free(topNode);
        topNode == NULL;
    }
    
    return 0;
}


int main(){ 
    struct LinkStack s;
    printf("initStack1 \n");
    initStack(&s);
    printf("initStack2 \n");
    push(&s,50);
    push(&s,60);
    push(&s,70);

   //  打印log
    struct StackNode* topNode = s.top;
    while(topNode != NULL){
        printf("push val:%d \n",topNode->data);
        topNode = topNode->link;
    }

   //end
    int val ;
    pop(&s,&val);
    pop(&s,&val);
    pop(&s,&val);
    
    push(&s,80);
    push(&s,90);
    push(&s,100);

    // 打印log
    topNode = s.top;
    while(topNode != NULL){
        printf("push val:%d \n",topNode->data);
        topNode = topNode->link;
    }

   //end
    return 0;
}

0 0
原创粉丝点击