• 栈的顺序存储结构


    定义

    栈是一种限定仅在表尾进行插入或删除操作的线性表。允许插入或删除的一端为栈顶,另一端为栈底。特点是先进后出( first in last out )。栈的插入操作叫做入栈,栈的删除操作叫做出栈。

     

    结构表示

    typedef int Elemtype;
    typedef struct
    {
        Elemtype data[size];
        int top;
    } Stack;

    操作集及实现

    /**

    *C语言

    */

    入栈 

    int push( Stack *s , Elemtype e )
    {
        if( s->top == size - 1 )
        {
            return 0;
        }
        s->top++;
        s->data[s->top] = e;
        
        return 1;
    }

    把指针加1,接着给栈顶赋值。

    出栈

    int pop( Stack *s , Elemtype *e )
    {
        if( s->top == -1 )
        {
            return 0;
        }
        *e = s->data[s->top];
        s->top--;
        
        return 1;
    }

    指针减1,将栈顶元素出栈,本质上只是移动指针,并没有将栈顶元素销毁,而是会在入栈的时候将其内容覆盖。

    遍历

    void display( Stack *s )
    {
        int i;
        for( i = 0 ; i <= s->top ; i++ )
        {
            printf("%d ",s->data[i]);
        }
        printf("
    ");
    }

    全部代码

    #include<stdio.h>
    #define size 20
    
    //栈的结构
    typedef int Elemtype;
    typedef struct
    {
        Elemtype data[size];
        int top;
    } Stack;
    
    //操作集
    //初始化 
    void init( Stack *s )
    {
        s->top = -1;
    }
    
    //入栈操作 
    int push( Stack *s , Elemtype e )
    {
        if( s->top == size - 1 )
        {
            return 0;
        }
        s->top++;
        s->data[s->top] = e;
        
        return 1;
    }
    
    
    //出栈操作
    int pop( Stack *s , Elemtype *e )
    {
        if( s->top == -1 )
        {
            return 0;
        }
        *e = s->data[s->top];
        s->top--;
        
        return 1;
    }
    
    void display( Stack *s )
    {
        int i;
        for( i = 0 ; i <= s->top ; i++ )
        {
            printf("%d ",s->data[i]);
        }
        printf("
    ");
    }
    
    int main()
    {
        Stack L;
        int n;
        
        init(&L);
        push(&L,5);
        push(&L,6);
        push(&L,7);
        display(&L);
        
        pop(&L,&n);
        display(&L);
        
        pop(&L,&n);
        display(&L);
        
        return 0;
    } 
    纸上得来终觉浅,绝知此事要躬行
  • 相关阅读:
    Spring-cloud微服务实战【三】:eureka注册中心(中)
    Spring-cloud微服务实战【二】:eureka注册中心(上)
    Spring-cloud微服务实战【一】:微服务的概念与演进过程
    数据压缩算法
    求最大连续子集
    天天看底层有什么用
    数字签名
    计算机全加器简单实现
    布隆过滤器
    纠错码简介
  • 原文地址:https://www.cnblogs.com/modesty-boy/p/13456398.html
Copyright © 2020-2023  润新知