zoukankan      html  css  js  c++  java
  • 共享空间的栈

    当我们需要两个栈的存储数据的时候,可能会出现其中一个栈不够用,另外一个栈又不经常使用的情况,可以试着把两个栈合体。这是一种策略,在日常生活中也有类似的情况,比如情侣,有的情侣毕业了还是分开住,有的情侣可能会想一起租房子不是更好嘛,他好,我也好。

    共享栈的表示

    typedef int Elemtype;
    typedef struct
    {
        Elemtype data[size];
        int top1;//栈1指针 
        int top2;//栈2指针 
    } Stack;

     操作集

    入栈

    /*
    *StackNum为栈的号数 
    */
    int push( Stack *s , Elemtype e , int StackNum )
    {
        if( s->top1 + 1 == s->top2 )
        {
            return 0;
        }
        if( StackNum == 1 )
        {
            s->data[++s->top1] = e;
        }
        else
        {
            s->data[--s->top2] = e;
        }
        
        return 1;
    }

    出栈

    int pop( Stack *s , Elemtype *e , int StackNum )
    {
        if( StackNum == 1 )
        {
            if( s->top1 == -1 ) return 0;
            
            *e = s->data[s->top1--];
        }
        else if( StackNum == 2 )
        {
            if( s->top2 == size ) return 0;
            
            *e = s->data[s->top2++];
        }
        
        return 1;
    }

    遍历

    void display( Stack *s )
    {
        int i;
    
        printf("栈1: ");
        for( i = 0 ; i <= s->top1 ; i++ )
        {
            printf("%d ",s->data[i]);
        }
    
        printf("
    栈2: ");
        for( i = size - 1 ; i >= s->top2 ; i-- )
        {
            printf("%d ",s->data[i]);
        }
        printf("
    ");
    }

    全部代码

    #include<stdio.h>
    #define size 20
    
    typedef int Elemtype;
    typedef struct
    {
        Elemtype data[size];
        int top1;//栈1指针 
        int top2;//栈2指针 
    } Stack;
    
    void init( Stack *s )
    {
        s->top1 = -1;
        s->top2 = size;
    }
    /*
    *StackNum为栈的号数 
    */
    int push( Stack *s , Elemtype e , int StackNum )
    {
        if( s->top1 + 1 == s->top2 )
        {
            return 0;
        }
        if( StackNum == 1 )
        {
            s->data[++s->top1] = e;
        }
        else
        {
            s->data[--s->top2] = e;
        }
        
        return 1;
    }
    
    int pop( Stack *s , Elemtype *e , int StackNum )
    {
        if( StackNum == 1 )
        {
            if( s->top1 == -1 ) return 0;
            
            *e = s->data[s->top1--];
        }
        else if( StackNum == 2 )
        {
            if( s->top2 == size ) return 0;
            
            *e = s->data[s->top2++];
        }
        
        return 1;
    }
    
    void display( Stack *s )
    {
        int i;
    
        printf("栈1: ");
        for( i = 0 ; i <= s->top1 ; i++ )
        {
            printf("%d ",s->data[i]);
        }
    
        printf("
    栈2: ");
        for( i = size - 1 ; i >= s->top2 ; i-- )
        {
            printf("%d ",s->data[i]);
        }
        printf("
    ");
    }
    
    int main()
    {
        Stack L;
        init(&L);
        int n;
        
        push(&L,3,1);
        push(&L,4,1);
        push(&L,12,2);
        push(&L,11,2);
        push(&L,13,2);    
        display(&L);
        
        pop(&L,&n,1);
        pop(&L,&n,2);
        display(&L);
        
        return 0;
    }

     

    纸上得来终觉浅,绝知此事要躬行
  • 相关阅读:
    Maven学习
    Oracle_SQL函数-单行函数
    Java 8新特性-5 内建函数式接口
    量子优势
    配置Emeditor编译运行JAVA,附私家珍藏版
    配置Emeditor编译运行JAVA,附私家珍藏版
    Notepad2-mod,轻量级文本编辑器、代替记事本的最佳选择
    三星S7短信不能提示的处理方法
    三星S7短信不能提示的处理方法
    说说宾得机身的十大人性化设定和功能[转]
  • 原文地址:https://www.cnblogs.com/modesty-boy/p/13456858.html
Copyright © 2011-2022 走看看