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

  • 相关阅读:
    html的转码玉反转码
    获取url据对路径写法
    CSS 外边距合并
    页面禁制选中元素的 背景变蓝的通用写法
    centos7.3上安装oracle11.2.4RAC
    通过ansible检查所有服务器根目录磁盘使用情况
    解决es集群启动完成后报master_not_discovered_exception(hostname有错误)
    tidb4.0执行大型sql报没有tmp目录错处理(ERROR 1105 (HY000): open /tmp/1000_tidb/MC4wLjAuMDo0MDAwLzAuMC4wLjA6MTAwODA)
    aix磁盘创建pv、lv
    aix6.1安装oracle
  • 原文地址:https://www.cnblogs.com/spsglz/p/7674137.html
Copyright © 2011-2022 走看看