/*双栈数据结构(第三章 栈与队列)编号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");
}
数组存储的双栈
最新推荐文章于 2023-09-28 18:18:50 发布