zoukankan      html  css  js  c++  java
  • 一个数组构造两个堆栈

    ***用一个数组表示两个堆栈,最大限度的利用空间

    0 1 2 3

    若果像右图中从中间分成两部分,则可能存在其中一个堆栈满了,而另一个堆栈还有空的,为你最大限度的利用空间,需要两边像中间长,知道指针碰头表示堆栈已满

    #include<iostream>
    using namespace std;
    #define Maxsize 100
    class stack{
    public:
        int a[Maxsize];
        int top1;
        int top2;
    };
    void push(stack&A, int x, int Tag);
    int pop(stack&A, int Tag);
    int main(){
        stack A;
        A.top1 = -1; //从数组开头开始长
        A.top2 = Maxsize; //从数组末尾长
        return 0;
    }
    void push(stack&A, int x, int Tag){
        if (A.top2 - A.top1 == 1) { //这样才能最大限度的利用数组空间
            cout << "堆栈已满";
            return;
        }
        if (Tag == 1) { //Tag==1表示前面一个堆栈
            A.top1++;
            A.a[A.top1] = x;
        }
        else {
            A.top2--;
            A.a[A.top2] = x;
        }
    }
    int pop(stack&A, int Tag){
        if (Tag == 1) {
            if (A.top1 == -1) {
                cout << "堆栈已空" << endl;
                return 0;
            }
            int l = A.a[A.top1];
            A.top1--;
            return l;
        }
        else {
            if (A.top2 == Maxsize) {
                cout << "堆栈已空" << endl;
                return 0;
            }
            int m = A.a[A.top2];
            A.top1++;
            return m;
        }
    }
  • 相关阅读:
    sql常用函数
    sql数据库查询
    数据库增删改查
    数据库基本概念
    C#总结
    C#结构体
    C#常用函数类
    初识函数
    C#冒泡排序 折半查找
    12月27日笔记
  • 原文地址:https://www.cnblogs.com/td15980891505/p/4411927.html
Copyright © 2011-2022 走看看