美文网首页
基础数据结构学习记录:栈

基础数据结构学习记录:栈

作者: 统计学徒 | 来源:发表于2018-11-06 11:42 被阅读0次

    栈(stack)是一种基本的数据结构,属于动态集合(集合在算法操作的过程中能增大、缩小或者发生其他其他变化),实现的是一种后进先出(last-in first-out,LIFO)的策略,最后压入的数据最先弹出。在计算机上有几种实现方法,这里通过数组实现。

    关于栈的基本操作有:压入Push(属于INSERT操作),弹出Pop(属于DELETE操作)。

    可以用一个数组S[1,...,n]来实现一个最多可以容纳n个元素的栈。栈中包含元素为S[1,...,S.top],其中S[1]是栈底元素,S[S.top]是栈顶元素指向最新插入的元素。当S.top=0时,栈是(empty)的。

    算法

    STACK-EMPTY(S)
        if S.top == 0
            return TRUE
        else
            return FALSE
    
    STACK-FULL(S,maxsize)
        if S.top == maxsize
            return TRUE
        else
            return FALSE
    
    PUSH(S,x)
        if STACK-FULL(S,maxsize)
            error "overflow"
        else
            S.top = S.top + 1
            S[S.top] = x
    
    POP(S)
        if STACK-EMPTY(S)
            error "underflow"
        else
            S.top = S.top - 1
            return S[S.top + 1]
    

    使用基础程序演示过程:

    #include<stdio.h>
    #include<stdbool.h>
    
    // initial
    int top = -1;
    
    // overflow check
    bool Full(int S[],int length)
    {
        if(top == length-1)    
            return true;
        else    
            return false;
    }
    // underflow check
    bool Empty(int S[])
    {
        if(top==-1)    
            return true;
        else    
            return false;
    }
    void Push(int S[],int x, int length)
    {
        if(Full(S,length))
            printf("Stack is overflow\n");
        else
        {
            top++;
            S[top] = x;
            printf("%d\t",S[top]);     
            // show the top element of stack
        }
    }
    void Pop(int S[])
    {
        if(Empty(S))
            printf("Stack is underflow\n");
        else
        {
            top--;
            printf("%d\t",S[top+1]);    
            // show the top element of stack
        }
    }
    
    int main()
    {
        int S[10] = {0};
        int i = 0;
        int length;    // the maxsize of stack
        length = sizeof(S)/sizeof(S[0]);
        printf("%d\n",length);
        printf("***** Push stack *****\n");
        for(i=0; i<=10; i++)
        {
            Push(S,i,length);
        }
        printf("***** Pop stack *****\n");
        for(i=0; i<=10; i++)
        {
            Pop(S);
        }
        printf("%d\n",top); 
        return 0;
    }
    

    细节和优化有待以后补充
    参考书籍《算法导论/Introduction to Algorithms》

    相关文章

      网友评论

          本文标题:基础数据结构学习记录:栈

          本文链接:https://www.haomeiwen.com/subject/jjyyxqtx.html