• 栈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()

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

  • 相关阅读:
    Daily Scrum – 1/15
    Daily Scrum – 1/12
    Daily Scrum – 1/11
    Daily Scrum – 1/7
    Daily Scrum – 1/6
    Daily Scrum – 1/5
    Daily Scrum – 1/4
    1/13 update
    stand up meeting 1--11
    stand up meeting 1-6
  • 原文地址:https://www.cnblogs.com/gabygoole/p/4611580.html
Copyright © 2020-2023  润新知