zoukankan      html  css  js  c++  java
  • 栈的实现----链栈

    /*
    Name: 栈的链式实现
    Copyright:
    Author:
    Date:
    Description:
    */

    #ifndef STACK_H_INCLUDED
    #define STACK_H_INCLUDED

    #include "ds.h" //for Status,OK ...

    #ifndef ElemType
    #define ElemType int /* 数据元素类型默认为 int */
    #define ELEMTYPE_TAG
    #endif


    ///////////////////////////////////////////////////////////
    //链栈的存储结构定义
    typedef struct LNode {
    ElemType data;
    struct LNode *next;
    } LNode, *LinkList;

    typedef LinkList LinkStack; //链栈类型

    ///////////////////////////////////////////////////////////
    //链栈的基本操作声明

    //构造一个空栈S
    Status InitStack(LinkStack &S);
    //销毁栈S
    Status DestroyStack(LinkStack &S);
    //将栈S清空
    Status ClearStack(LinkStack &S);
    //若栈S为空返回TRUE,否则FALSE
    Status StackEmpty(LinkStack S);
    //返回栈S中的元素个数
    int StackLength(LinkStack S);
    //用e返回栈顶元素
    // 前提:栈S存在且不空
    Status GetTop(LinkStack S, ElemType &e);
    //元素e入栈S
    Status Push(LinkStack &S, ElemType e);
    //S出栈用e返回出栈元素
    // 前提:栈S存在且不空
    Status Pop(LinkStack &S, ElemType &e);

    ///////////////////////////////////////////////////////////
    //链栈的基本操作的实现

    //构造一个空栈S
    Status InitStack(LinkStack &S)
    { S=NULL;
    // TODO (#1#): 构造一个空栈S,不带头结点
    return OK;
    //-------------------------------------
    }

    //销毁栈S
    Status DestroyStack(LinkStack &S)
    {
    // TODO (#1#):销毁栈S,相当于清空栈
    return ERROR;
    //-------------------------------------
    }

    //将栈S清空
    Status ClearStack(LinkStack &S)
    { S=NULL;
    // TODO (#1#): 将栈S清空,释放所有结点
    return OK;
    //-------------------------------------
    }

    //若栈S为空返回TRUE,否则FALSE
    Status StackEmpty(LinkStack S)
    { if(S==NULL) return true;
    else return false;
    // TODO (#1#): 若栈S为空返回TRUE,否则FALSE
    //-------------------------------------
    }

    //返回栈S中的元素个数
    int StackLength(LinkStack S)
    { int i=0;
    LNode* p=S;
    while(p){
    p=p->next;
    i++;
    }
    // TODO (#1#): 返回栈S中的元素个数
    return i;
    //-------------------------------------
    }

    //用e返回栈顶元素
    // 前提:栈S存在且不空
    Status GetTop(LinkStack S, ElemType &e)
    { if(S==NULL) return ERROR;
    e=S->data;
    // TODO (#1#):若栈S不空,则用e返回栈顶元素
    return OK;
    //-------------------------------------
    }

    //元素e入栈S
    Status Push(LinkStack &S, ElemType e)
    { LNode* q=(LNode*)malloc(sizeof(LNode));
    q->data=e;
    q->next=S;
    S=q;
    // TODO (#1#): 插入元素e作为新的栈顶
    return OK;
    //-------------------------------------
    }

    //S出栈用e返回出栈元素
    // 前提:栈S存在且不空
    Status Pop(LinkStack &S, ElemType &e)
    { if(S==NULL) return ERROR;
    LNode* q=S;
    e=q->data;
    S=q->next ;
    free(q);
    // TODO (#1#):若栈S不空,则删除栈顶元素用e返回
    return OK;
    //-------------------------------------
    }


    #ifdef ELEMTYPE_TAG
    #undef ElemType
    #undef ELEMTYPE_TAG
    #endif

    #endif

  • 相关阅读:
    0.嵌入式系统 Boot Loader 技术内幕
    JAVA_SE基础——25.面向对象练习
    JAVA_SE基础——24.面向对象的内存分析
    JAVA_SE基础——23.类的定义
    深入理解java的static关键字
    JAVA_SE基础——22.面向对象的概念
    JAVA_SE基础——21.二维数组的定义
    Java常用排序算法/程序员必须掌握的8大排序算法
    JAVA_SE基础——20.数组的常见操作
    JAVA_SE基础——19.数组的定义
  • 原文地址:https://www.cnblogs.com/spsglz/p/7674137.html
Copyright © 2011-2022 走看看