美文网首页
堆栈的顺序存储实现

堆栈的顺序存储实现

作者: Sivin | 来源:发表于2018-04-06 22:30 被阅读26次

    堆栈一个重要的特点是:入栈方式和出栈方式,是后进先出它不同于线性表结构:可以有位置操作,比如说一个线性表的数据结构.我们在操作第几个位置的元素,这里在这种数据结构中是没有的.
    栈中的数据操作:push压栈,pop入栈.还有其他的一些操作,但是这两个是必须的.实现这样的数据结构可以用顺序存储即数组实现,也可以使用链式存储.
    下面我们就用顺序存储来实现栈数据结构和几个很重要的操作.

    // 堆栈的数组实现
    // Created by Sivin on 2018/4/6.
    //
    #include <stdio.h>
    #include <stdlib.h>
    #define  MAX_SIZE 10
    typedef int ElementType;
    
    struct Node{
        ElementType data[MAX_SIZE];
        
        //因为栈的操作,必须是在栈顶进行的,因此我们用数组实现时,需要记录顶部元素的位置
        int top;
    };
    typedef struct Node Stack;
    typedef struct Node *PStack;
    
    /**
     * 获取堆栈的大小
     * @param stack
     * @return
     */
    int getStackSize(PStack stack){
    
        if(stack != NULL){
            return stack->top+1 ;
        }
        return -1;
    }
    
    int push(PStack stack , ElementType e){
        if(stack == NULL){
            printf("堆栈指针为空,堆栈不存在\n");
            return  -1;
        }
        if(stack->top == MAX_SIZE-1){
            printf("堆栈已满\n");
            return -1;
        }
        stack->data[++(stack->top)] = e;
    }
    
    int pop(PStack stack ,ElementType *e){
        if(stack == NULL){
            printf("堆栈指针为空,操作失败\n");
            return -1;
        }
        if(stack->top == -1){
            printf("堆栈已空\n");
            return -1;
        }
        *e = stack->data[stack->top];
        stack->top--;
        return 0;
    }
    
    int main(){
    
        Stack stack;
        stack.top = -1;
        printf("stack size = %d\n",getStackSize(&stack));
        push(&stack,5);
        push(&stack,7);
        push(&stack,9);
        printf("stack size = %d\n",getStackSize(&stack));
        int elm = 0;
        while ( pop(&stack,&elm) != -1){
            printf("elm= %d\t",elm);
        }
        return 0;
    }
    

    相关文章

      网友评论

          本文标题:堆栈的顺序存储实现

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