前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >西安交通大学915-2017-编程3

西安交通大学915-2017-编程3

作者头像
lexingsen
发布2022-02-24 19:55:21
1780
发布2022-02-24 19:55:21
举报
文章被收录于专栏:乐行僧的博客乐行僧的博客

题目描述:

设有两个栈s1, s2都采用顺序存储方式,并且共享一个存储区域[0, … , maxsize - 1],为了尽量使用空间,减少溢出的可能,可采用栈顶相向,迎面增长的存储方式,请设计s1, s2的出栈,进栈操作算法。 要求:采用空间策略;算法数据结构;写出算法步骤

解题思路:

  • 分为左栈和右栈,左栈栈顶指针初始为-1,右栈栈顶指针初始为maxsize
  • 共享栈满的条件:top1 + 1 == top2
  • 左栈空的条件:top1 == -1
  • 右栈空的条件:top2 == maxsize
代码实现:
代码语言:javascript
复制
#include <iostream>
#include <cstring>
using namespace std;

const int MAXSIZE = 100;

class SharedStack {
private:
    int leftTop;
    int rightTop;
    int st[MAXSIZE];
public:
    SharedStack() {
        this->leftTop = -1;
        this->rightTop = MAXSIZE;
        memset(st, 0, sizeof(st));
    }

    bool IsFull() {
        return (this->leftTop + 1) == this->rightTop;
    }

    bool IsLeftEmpty() {
        return this->leftTop == -1;
    }

    bool IsRightEmpty() {
        return this->rightTop == MAXSIZE;
    }


    int GetLeftTop() {
        if (!IsLeftEmpty()) {
            return st[this->leftTop];
        }
        return -1;
    }

    int GetRightTop() {
        if (!IsRightEmpty()) {
            return st[this->rightTop];
        }
        return -1;
    }

    void PushLeft(int x) {
        if (IsFull()) {
            cout << "the shared stack is full!" << endl;
            return;
        }
        st[++this->leftTop] = x;
    }

    void PushRight(int x) {
        if (IsFull()) {
            cout << "the shared stack is full!" << endl;
            return;
        }
        st[--this->rightTop] = x;
    }

    void PopLeft() {
        if (IsLeftEmpty()) {
            cout << "empty! can not pop" << endl;
            return;
        }
        --this->leftTop;
    }

    void PopRight() {
        if (IsRightEmpty()) {
            cout << "empty! can not pop" << endl;
            return;
        }
        ++this->rightTop;
    }
};


int main() {
    int arr[] = {1, 2, 3, 4, 5};
    int n = sizeof(arr) / sizeof(int);
    SharedStack sta;
    for (int i = 0; i < n; i++) {
        sta.PushLeft(arr[i]);
    }
    while (!sta.IsLeftEmpty()) {
        cout << sta.GetLeftTop() << " ";
        sta.PopLeft();
    }
    cout << endl;

    SharedStack stb;
    for (int i = 0; i < n; i++) {
        stb.PushRight(arr[i]);
    }
    while (!stb.IsRightEmpty()) {
        cout << stb.GetRightTop() << " ";
        stb.PopRight();
    }
    cout << endl;
    return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述:
  • 解题思路:
    • 代码实现:
    相关产品与服务
    对象存储
    对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档