数组存储的双栈

/*双栈数据结构(第三章 栈与队列)编号0,1两个栈存储于数组空间V[m]中,栈底分别位于数组的两端 */
//要返校了赶紧写个代码纪念一下假期
#ifndef PCH_H
#define PCH_H
#include<stdio.h>
#include<iostream>
#include<cstdlib>
#include<math.h>
#include<malloc.h>
#include<string.h>
constexpr auto MAXSIZE = 100;
constexpr auto ERROR = 0;
constexpr auto OK = 1;
typedef int Status;
typedef struct
{
    int top[2], bot[2];//栈顶栈底指针
    int *V;//栈数组
    int m;//最大容纳空间

}DblStack;//双栈数据结构
Status InitStack(DblStack &D,int m);
Status EmptyStack(DblStack D);
Status FullStack(DblStack D);
Status Push(DblStack &D,int e1,int e2);
Status Pop(DblStack &D,int &e1,int &e2);
void TraverseStack(DblStack D);
// TODO: 添加要在此处预编译的标头

#endif //PCH_H
-------------------------------------
// pch.cpp: 与预编译标头对应的源文件;编译成功所必需的

#include "pch.h"

// 一般情况下,忽略此文件,但如果你使用的是预编译标头,请保留它。

Status InitStack(DblStack & D,int m)
{
    D.V = (int *)malloc(m*sizeof(int));
    if (!D.V) return ERROR;
    D.m = m;
    D.top[0] = D.top[0] = -1;//表示0栈空
    D.bot[1] = D.top[1] = m;//表示1栈空
    return OK;
}

Status EmptyStack(DblStack D)
{
    if(D.top[0]==-1&&D.top[1]==D.m)
    return OK;
    return ERROR;
}

Status FullStack(DblStack D)
{
    if (D.top[1] - D.top[0] == 1)return OK;//栈满
    return ERROR;
}

Status Push(DblStack & D, int e1, int e2)
{
    if (FullStack(D))
    {
        std::cout << "full stack!";
        return ERROR;
    }
    if (D.top[1] - D.top[0] == 2)
    {
        D.V[++D.top[0]] = e1;
        std::cout << "no enough space for "<<e2;
        return OK;
    }
    D.V[++D.top[0]] = e1;
    D.V[--D.top[1]] = e2;
    return OK;
}

Status Pop(DblStack & D, int & e1, int & e2)
{
    if (EmptyStack(D))
    {
        std::cout << "empty stack!";
        return ERROR;
    }
    if (D.top[0]==0&&D.top[1]==D.m)
    {
        e1 = D.V[D.top[0]--];
        e2 = 9999;//e2没有值
        return OK;
    }
    e1 = D.V[D.top[0]--];
    e2 = D.V[D.top[1]++];
    return OK;
}

void TraverseStack(DblStack D)
{

    while(!EmptyStack(D))
    {
        if (D.top[0]==0&&D.top[1]==D.m)
        {
            std::cout <<D.V[D.top[0]];
            break;
        }
        std::cout << D.V[D.top[0]--] << " " << D.V[D.top[1]++];
        std::cout << "\n";
    }
}
---------------------------------------
// ConsoleApplication1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include "pch.h"
#include <iostream>

int main()
{
    DblStack D;
    int m = 10;
    int e1, e2;
    InitStack(D,m);
    while(!FullStack(D))
    {
        std::cout << "push elem\n";
        std::cin >> e1 >> e2;
        Push(D, e1, e2);
    }
    TraverseStack(D);
    Pop(D, e1, e2);
    std::cout << e1 <<" "<< e2;
    system("pause");
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值