[2023 King's Road Data Structure] [Stack、Queue and Array-page70-05]CおよびC++の完全な実装(直接実行可能)

~~~どうして文体が鈍く終わり、物語は最初は普通に認識されないのでしょうか✌✌✌

完全なコードが必要な場合は、以下の公開アカウントをフォローし、バックグラウンドで「コード」と返信して取得できます。Aguangはあなたの訪問を楽しみにしています〜

トピック:
ここに画像の説明を挿入
シーケンシャルスタッキングを使用し、ストレージ領域を共有する2つのスタックs1とs2があります。スペースを最大限に活用し、オーバーフローの可能性を減らすために、スタックの最上部が向かい合って頭を大きくするストレージ方式-onを使用できます。s1とs2を設計してみてください。スタックをプッシュおよびポップするためのアルゴリズム。

問題解決のアイデア:

>共享栈

コード:

#include <iostream>
using namespace std;
#define MAXSIZE 100

// 单链表定义
typedef struct
{
    int data[MAXSIZE];
    int top1 = -1;
    int top2 = MAXSIZE;
} stk;

void Push(stk &s, int top, int value)
{
    if (top != 1 && top != 2)
    {
        cout << "栈号输入错误" << endl;
        return;
    }

    if (s.top2 - s.top1 == 1)
    {
        cout << "当前栈已满" << endl;
        return;
    }

    if (top == 1)
    {
        s.data[++s.top1] = value;
    }
    else
    {
        s.data[--s.top2] = value;
    }
}

int Pop(stk &s, int top)
{
    if (top != 1 && top != 2)
    {
        cout << "栈号输入错误" << endl;
        return -1;
    }

    if (top == 1)
    {
        if (s.top1 == -1)
        {
            cout << "当前栈已空" << endl;
            return -1;
        }
        else
        {
            return s.data[s.top1--];
        }
    }
    else
    {
        if (s.top2 == MAXSIZE)
        {
            cout << "当前栈已空" << endl;
            return -1;
        }
        else
        {
            return s.data[s.top2++];
        }
    }
}

int main()
{
    stk s;

    Push(s, 1, 2);
    Push(s, 1, 4);
    Push(s, 1, 6);
    Push(s, 2, 3);
    Push(s, 2, 7);

    cout << Pop(s, 1) << endl;
    cout << Pop(s, 2) << endl;
    cout << Pop(s, 2) << endl;
    cout << Pop(s, 2) << endl;
    cout << Pop(s, 1) << endl;
}

おすすめ

転載: blog.csdn.net/m0_47256162/article/details/124439400