zoukankan      html  css  js  c++  java
  • 二、栈

    栈,是一个先进后出的线性表。

    最开始栈中不含有任何数据,叫做空栈,此时栈顶就是栈底。

    线性表有两种存储形式,及顺序表存储和链表存储。一般的栈是用顺序表的形式实现的

    定义一个顺序栈

    typedef struct
    {
    ElemType *base;
    ElemType *top;
    int stacksize;
    }sqStack;


    创建一个栈

    initStack(sqStack *s)
    {
    /*内存中开辟一段连续空间作为栈空间,首地址赋值给s->base*/
    s->base = (ElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType));
    if(!s->base) exit(0); /*分配空间失败*/
    s->top = s->base; /*最开始,栈顶就是栈底*/
    s->stacksize = STACK_INIT_SIZE; /*最大容量为STACK_INIT_SIZE */
    }

    入栈

    Push(sqStack *s, ElemType e)
    {
    if(s->top - s->base >= s->stacksize){
    /*栈满,追加空间*/
    s->base = (ElemType *)realloc(s->base, (s->stacksize +
    STACKINCREMENT)*sizeof(ElemType));
    if(!s->base) exit(0); /*存储分配失败*/
    s->top = s->base + s->stacksize;
    s->stacksize = s->stacksize + STACKINCREMENT; /*设置栈的最大容量*/
    }
    *(s->top) = e; /*放入数据*/
    s->top++;
    }

    出栈

    Pop(sqStack *s , ElemType *e)
    {
    if(s->top == s->base) return;
    *e = *--(s->top);
    }



    栈的长度

    int StackLen(sqStack s)
    {
    return (s.top - s.base) ;
    }



  • 相关阅读:
    phoneGap
    backbonejs使用
    优化后的光标插件
    选择文本,范围
    js最佳继承范型
    深入理解事件捕获冒泡
    keyCode,charCode,which
    与IE奋战的血泪史
    【程序员的自我修养】如何使用IRC
    【程序员的自我修养】写给新手程序员的一封信
  • 原文地址:https://www.cnblogs.com/MrDing/p/2353353.html
Copyright © 2011-2022 走看看