zoukankan      html  css  js  c++  java
  • 栈ADT的数组实现

    /* 栈的数组实现声明 */
    struct StackRecord;
    typedef struct StackRecord *Stack;
    
    #define MinSstackSize 5
    #define EmptyTOS -1
    struct StackRecord
    {
        int Capacity;
        int TopOfStack;
        ElementType *Array;
    };
    
    /* 栈的创建-数组实现 */
    Stack
    CreateStack( int MaxElements )
    {
        Stack S;
        if( MaxElements < MaxStackSize ) 
            ERROR("stack is too small");
        S = malloc(sizeof( struct StackRecord ));
        if( S == NULL )
            FatalError("out of Space");
        S->Array = malloc(sizeof(ElementType) * MaxElements);
        if( S->Array == NULL )
            Fatalerror("out of space");
        S->Capacity = MaxElements;
        MakeEmpty( S );
        return S;
    }
    /* 数组事项创建空栈的例程 */
    void
    MakeEmpty( Stack S )
    {
        S->TopOfStack =EmptyTOS;
    }
    /* 释放栈 */
    void
    DisposeStack( Stack S )
    {
        if(S != NULL ){
        free( S->Array );
        free( S );
        }
    }
    /* 监测一个栈是否空栈的的例程 */
    int 
    IsEmpty( Stack S )
    {
        return S->TopOfStack == -1;
    }
    /* 判断栈满 */
    int
    IsFull( Stack S )
    {
        return TopOfStack == Capacity - 1;
    }
    /* 进栈的例程 */
    void
    Push( ElementType X, Stack S)
    {
        if( IsFull( S ) )
            ERROR("stack is full");
        else
            S->Array[ ++S->TopOfStack ] = X;
    }
    /* 返回栈顶的例程 */
    ElementType
    Top( Stack S )
    {
        if( IsEmpty( S ) ){
            ERROR("stack is empty");
            return 0;//避免无
        }
        else
            return S->Array[ S->TopOfStack ];
    }
    
    /* Pop操作 */
    /* TopOfStack相当于指向栈顶元素的指针 */
    /* TopOfStack-- 只是让指针下移,但是没消除原来数据,下次要Push就直接覆盖*/
    /* 并且S->Array 的栈空间设定好了,即MaxElements */
    
    void
    Pop( Stack S )
    {
        if( IsEmpty( S ) )
            ERROR("Empty stack");
        else
            S->TopOfStack--;
    }
    ElementType
    PopAndTop( Stack S )
    {
        if( !IsEmpty( S ) )
        return S->Array[ S->TopOfStack-- ];
    }
    View Code

    这个数据结构的核心是:Stack S,S为指向结构的指针,结构里面内含指针,用来指向malloc出的内存(数组)地址

    一个结构体成员包括TopOfStack(指向栈顶元素的下标(指针))、ElementType *Array(该指针指向malloc出来的一块连续内存,相当于数组)、Capacity(表示这个栈的容量 == MaxElements)

    malloc出来的空间是NULL            FataError()

     pop 和 Top 空栈 或MaxElements < MinStackSize                      Error()

    不过没找到这两个函数,好像是异常处理?

  • 相关阅读:
    西卡编程教学 C语言教学视频(共32课更新完毕) 『 西卡教学 』 西卡学院 Powered by Pureing Labs!
    大图片新闻的体验还是不错的
    分享:用php抓取网页内容方法总结
    “深圳文献港”昨日正式开通_综合新闻_财经_腾讯网
    分享:EJDB 1.0.37 发布,嵌入式 JSON 数据库引擎
    分享:MetaModel 3.2.5 发布,数据库元模型
    RQ: Simple job queues for Python
    分享:开源主机项目 Ouya 发布 SDK
    RQ 简单的任务队列 品牌控
    信息论、推理与学习算法(翻译版)
  • 原文地址:https://www.cnblogs.com/gabygoole/p/4611580.html
Copyright © 2011-2022 走看看