前言
提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
一、什么为共享栈?
基于顺序表实现,数组有连个端点,两个端点为两个栈的栈低,两个栈共用一个数组。
二、实现代码
#pragma once
const int SIZE = 20;
enum StatckNumber
{
eStatckFirst,
eStatckSecond
};
class SharedStacks
{
public:
SharedStacks()
{
memset(data, 0, SIZE);
top1 = -1;
top2 = SIZE;
}
void push(int d, StatckNumber statck)
{
if (top1 - 1 == top2) // 栈已满
return;
if (statck == eStatckFirst) //第一个栈入栈
{
data[++top1] = d;
}
else //第二个栈入栈
{
data[--top2] = d;
}
}
int pop(StatckNumber statck)
{
int data;
if (statck == eStatckFirst) //第一个栈入栈
{
if (top1 != -1)
{
data = this->data[top1--];
}
}
else //第二个栈入栈
{
if (top2 != SIZE)
{
data = this->data[top2++];
}
}
return data;
}
private:
int data[SIZE];
int top1; //第一个栈顶
int top2; //第二个栈顶
};
总结
该方法只适用于两个栈的类型一样的情况,并且由于采用的是顺序表存储,栈满时扩展很麻烦,可以判断栈满时,重新申请一片更大的存储空间,将旧的数据拷贝到新的内存空间,然后释放旧的内存空间。