本文主要是介绍第三章算法设计题1,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
第三章算法设计题1
题目描述
![在这里插入图片描述](/images/baidian.png)
代码实现
#pragma once
#include <iostream>
using namespace std;
#define MAXSIZE 6
//双栈数据结构定义
typedef struct
{
int top[2], bot[2]; //栈顶和栈底指针
int* v; //栈数组
int m; //栈最大可容纳元素个数
}DblStack;
//双栈初始化
void InitStack(DblStack& S)
{
S.v = new int[MAXSIZE];
S.m = MAXSIZE;
S.top[0] = -1;
S.top[1] = S.m;
}
//判断栈空
bool IsEmptyStack(DblStack& S)
{
if (S.top[0] == -1 && S.top[1] == S.m)
{
return true;
}
else
{
return false;
}
}
//判断栈满
bool IsFullStack(DblStack& S)
{
if (!IsEmptyStack(S) && S.top[1] - S.top[0] == 1)
{
return true;
}
else
{
return false;
}
}
//左边进栈操作
void PushLeft(DblStack& S,int e)
{//rl等于0进左栈,等于1进右栈
if (IsFullStack(S))
{
cout << "栈满" << endl;
exit(0);
}
S.v[++S.top[0]] = e;
}
//右边进栈操作
void PushRight(DblStack& S, int e)
{
if (IsFullStack(S))
{
cout << "栈满" << endl;
exit(0);
}
S.v[--S.top[1]] = e;
}
//左边出栈
int PopLeft(DblStack& S)
{
if (IsEmptyStack(S))
{
cout << "栈空" << endl;
exit(0);
}
return S.v[S.top[0]--];
}
//右边出栈
int PopRight(DblStack& S)
{
if (IsEmptyStack(S))
{
cout << "栈空" << endl;
exit(0);
}
return S.v[S.top[1]++];
}
//遍历双栈
void printDblStack(DblStack stack)
{
//输出左栈
for (int i = 0; i <= stack.top[0]; i++)
{
cout << stack.v[i] << " ";
}
//输出右栈
for (int i = stack.top[1]; i < stack.m; i++)
{
cout<< stack.v[i]<<" ";
}
cout<<endl;
}
int main()
{
DblStack stack;
//初始化双栈
InitStack(stack);
//判断总体是否为空栈
if (IsEmptyStack(stack))
{
cout << "空" << endl;
}
else
{
cout << "非空" << endl;
}
//左栈进栈
PushLeft(stack, 1);
PushLeft(stack, 2);
PushLeft(stack, 3);
//右栈进栈
PushRight(stack, 6);
PushRight(stack, 5);
PushRight(stack, 4);
//判断总体是否为空栈
if (IsEmptyStack(stack))
{
cout << "空" << endl;
}
else
{
cout << "非空" << endl;
}
//遍历
printDblStack(stack);
system("pause");
return 0;
}
运行结果
![在这里插入图片描述](/images/baidian.png)
这篇关于第三章算法设计题1的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!