栈的链式储存结构

//

//  main.cpp

//  栈的链式储存结构

//

//  Created by 柯木超 on 2018/12/4.

//  Copyright © 2018 柯木超. All rights reserved.

//


#include <iostream>


// 链式栈的基本数据单元

typedef struct Stack{

    int data;

    struct Stack *next;

}linkStack, *link;

/**

链式储存结构和顺序存储结构的区别:



1、链式储存结构是由多个结构体组成的

2、而顺序存储结构就一个结构体构成的,然后结构体里面包含全部的数据和一个指针

**/



// 创建链栈

link createStask(){

    // 头指针
    link T,P,M; //T记录头节点,M 记录当前移动节点,P是当前输入节点
    T = (link)malloc(sizeof(linkStack));
    M=T;
    for (int i=0; i<10;i++) {
        P = (link)malloc(sizeof(linkStack));
        P->data = i;
        M->next = P;
        M = M->next;
    }
    M->next = NULL; //  链表的末尾记得一定要设置为空
    return T;
}



// 打印数据

void printStack(link L){
    while (L->next != NULL) {
        L=L->next;
        printf("%d",L->data);
    }
    printf("\n");
}



// 插入数据(只能插入栈顶)

link insertStask(link L, int data){
    link P = (link)malloc(sizeof(linkStack));
    P->data = data;
    P->next = L->next;
    L->next = P;
    return L;

}

// 删除数据

link deleteStask(link L){
    link T = L; // 标记头节点
    link frist = L->next; //拿到第一个有数据的节点
    T->next = L->next->next;
    free(frist);
    return T;

}


// 获取斩顶元素

int getTopStask(link L){
    int i = 0;
    i=L->next->data;
    return i;
}


int main(int argc, const char * argv[]) {

    link L = createStask();

    printf("斩顶元素==%d\n",getTopStask(L));

    printStack(L);

    deleteStask(L);

    printStack(L);

    insertStask(L, 100);

    printStack(L);

    return 0;

}

猜你喜欢

转载自blog.csdn.net/s12117719679/article/details/84783902