其他数据结构链接如下:
栈:动态集合。在栈中,被删除的是最近插入的元素,其实现的是一种后进先出策略。在栈上插入操作称为压入PUSH,删除操作称为弹出POP
代码如下:
#include <iostream>
#include <memory>
using namespace std;
template<typename T>
class myStack{
private:
int iSize = 0;
int iTop = -1;
T *pData;
public:
void set_size(int size)
{
if(pData == NULL)
{
pData = new T[size];
for(int i = 0; i < size; i++)
{
pData[i] = 0;
}
this->iSize = size;
}
else
{
T *pTmpData = new T[size];
if(size < this->iSize)
{
for(int i = 0; i < this->iSize; i++)
{
pTmpData[i] = pData[i];
}
}
else
{
for(int i = 0; i < size; i++)
{
if(i < this->iSize)
{
pTmpData[i] = pData[i];
}
else
{
pTmpData[i] = 0;
}
}
}
delete pData;
pData = pTmpData;
this->iSize = size;
}
};
const int get_size(){return iSize;};
const int get_top(){return iTop;};
bool empty(){return iTop == -1;};
bool push(T Data)
{
if(iTop >= iSize - 1){return false;}
iTop++;
pData[iTop] = Data;
return true;
}
bool pop(T *Data)
{
if(empty())
{
return false;
}
*Data = pData[iTop--];
return true;
}
~myStack()
{
if(pData != nullptr)
{
delete pData;
}
}
};
int main()
{
myStack<int> _stack;
_stack.set_size(6);
_stack.set_size(10);
cout<<"stack size:"<<_stack.get_size()<<endl;
int data;
if(_stack.pop(&data))
{
cout<<"data:"<<data<<endl;
}
for(int i = 0; i < 10; i++)
{
_stack.push(i);
}
if(_stack.push(11))
{
cout<<"success push stack:11"<<endl;
}
for(int i = 0; i < 11; i++)
{
int Data;
if(_stack.pop(&Data))
{
cout<<"Data:"<<Data<<endl;
}
else
{
cout<<"failed pop stack top:"<<_stack.get_top()<<endl;
}
}
return 0;
}
代码中还有好多个函数没有实现,例如判断栈是否满,有参构造函数等等....