线性结构--->栈的链式存储实现

栈的链式存储


算法介绍

感觉链式存储比顺序存储还简单的… 感觉难的都在 栈的应用上, 或者那几道 ACM 的题
简单写三了个算法

创建
压栈
出栈

没有写遍历,因为只能一个个出来, 反正 出栈也能检验程序是否正确,
以后的有时间再补充


第一次代码实现——–2016年-10月-4号 ———–

一开始是想按照严太太书上的写, 但是写着写着感觉不对劲, 感觉心累, 
为什么在 struct 里面定义那么多指针类型干嘛, 后面的代码虽然简洁, 非常实用, 但是感觉 对我不适合,

没有加注释...会补上的......
想着上次是9月20号, 这次竟然过去了 两个星期,真是不努力就退步, 加油!!!!!!!!!!
------------------------
#include <stdio.h>
#include <stdlib.h> 
#include <malloc.h>
#define true 1
#define false 0

typedef int Status;
typedef int ElemType;

typedef struct Node{
    ElemType data;
    struct Node *pStackNext;
}Stack, *pStack;
/*
1, 个人看法, 栈的链式存储, 其实简化版的 链式 
2, 压栈时,只能从头开始, 采用链式表的 头插法

*/
pStack createStack();// 
Status push(pStack S, ElemType e);//
Status pop(pStack S, ElemType *e);
int main(){
    ElemType pop_e; 
    pStack S = createStack();
    push(S, 1);
    push(S, 2);
    push(S, 3);
    if(pop(S,&pop_e)){
        printf("出栈成功!  出栈的值为: %d\n", pop_e);
    }
    if(pop(S,&pop_e)){
        printf("出栈成功!  出栈的值为: %d\n", pop_e);
    }if(pop(S,&pop_e)){
        printf("出栈成功!  出栈的值为: %d\n", pop_e);
    }if(pop(S,&pop_e)){
        printf("出栈成功!  出栈的值为: %d\n", pop_e);
    }
    return 0;
}
Status pop(pStack S, ElemType *e){
    if(S->pStackNext == NULL){
        printf("栈为空, 出栈失败!\n");
        return false;
    }
    pStack p = S->pStackNext;
    *e = p->data;
    S->pStackNext = p->pStackNext;
    free(p);
    return true; 
}

Status push(pStack S, ElemType e){
    //创建一个新的结点来存放 压入的值 
    pStack pNew = (pStack)malloc(sizeof(Stack));
    if(pNew == NULL){
        printf("内存分配失败, 压栈失败, 程序退出!!!\n");
        exit(-1);
    }
    pNew->data = e;

    //采用头插法, 新来的放在最前面 
    pNew->pStackNext = S->pStackNext;
    S->pStackNext = pNew;

    return true;
}
pStack createStack(){
    pStack S;
    S = (pStack)malloc(sizeof(Stack));
    if(S == NULL){
        printf("创建栈时内存分配失败!!!! 程序退出");
        exit(-1);
    }
    S->pStackNext = NULL;
    return S;
}

仅供参考 ,有错误望指出.

有大神路过请指点一下。 菜鸟求飞 !!!
有什么疑问 也可以在 下边 提问 ! (有点托大了)或者发邮件
E-Mail:[email protected]

猜你喜欢

转载自blog.csdn.net/qq_32603745/article/details/52737508