在数据结构中,栈是一种桶状结构,每次往桶里放数据,最后放的数据最先被拿出来,最先放进去的数据最后才能出来(FILO)
C语言:
C++语言:
一、文件清单:
MyStack.h:
#ifndef _MYSTACK_H#define _MYSTACK_H#include
using namespacestd;
template
classMyStack
{public:
MyStack(intsize);~MyStack();boolisStackEmpty();boolisStackFull();intgetStackLength();boolpush(T data);bool getTop(T *data);bool getBottom(T *data);boolpop();voidprintf();private:
T*m_tDatas;intm_iMaxSize;intm_iLength;
};
templateMyStack::MyStack(intsize)
{
m_iMaxSize=size;
m_iLength= 0;
m_tDatas= newT[size];
}
templateMyStack::~MyStack()
{delete[]m_tDatas ;
}
template
bool MyStack::isStackEmpty()
{if(0!=m_iLength)
{return false;
}return true;
}
template
bool MyStack:: isStackFull()
{if(m_iMaxSize !=m_iLength)
{return false;
}return true;
}
template
int MyStack::getStackLength()
{returnm_iLength;
}
template
bool MyStack::push(T data)
{if(!isStackFull())
{
m_tDatas[m_iLength]=data;
m_iLength++;return true;
}return false;
}
template
bool MyStack::getTop(T *data)
{if(!isStackEmpty())
{*data = m_tDatas[m_iLength-1];return true;
}return false;
}
template
bool MyStack::getBottom(T *data)
{if(!isStackEmpty())
{*data = m_tDatas[0];return true;
}return false;
}
template
bool MyStack::pop()
{if(!isStackEmpty())
{
m_iLength--;return true;
}return false;
}
template
void MyStack::printf()
{
cout<
{
cout<
}
cout<
}#endif
View Code
main.cpp(用于测试)
#include #include"MyStack.h"
using namespacestd;intmain()
{
MyStack mystack(5);floattop;floatbottom;//push();
mystack.push(1.0f);
mystack.push(2.0f);
mystack.push(3.0f);
mystack.push(4.0f);
mystack.push(5.0f);
mystack.push(6.0f);
mystack.printf();//getTop();getBottom()
mystack.getTop(&top);
mystack.getBottom(&bottom);
cout<
mystack.pop();
mystack.printf();for(int i=0;i<10;i++)
{
mystack.pop();
}
mystack.printf();
system("pause");return 1;
}
View Code
二、函数详解:
构造函数:
template MyStack::MyStack(intsize)
{
m_iMaxSize=size;
m_iLength= 0;
m_tDatas= newT[size];
}
m_iMaxSize 用于记录栈的最大深度,设置为输入值。
m_iLength用于记录栈的当前大小,构造时栈为空,所以置0。
m_tDatas为栈数据,这里为它分配空间。
push(T data):
template
bool MyStack::push(T data)
{if(!isStackFull())
{
m_tDatas[m_iLength]=data;
m_iLength++;return true;
}return false;
}
如果栈还没满,就往栈顶放入数据,同时m_iLength++来指示栈的容量增加了。
getTop(T *data):
template
bool MyStack::getTop(T *data)
{if(!isStackEmpty())
{*data = m_tDatas[m_iLength-1];return true;
}return false;
}
如果栈非空,获取栈顶的数据,这里注意获取对应数据时,数组的下标减一。
pop():
template
bool MyStack::pop()
{if(!isStackEmpty())
{
m_iLength--;return true;
}return false;
}
如果栈非空,移除栈顶的数据,只需要改变m_iLength就能达到目的。
三、结果:
第一行:我们使用push()函数放入了1-6,6个浮点数,但是栈被设置的大小只有5,所以“6”没有入栈。调用printf()打印只能看到1到5。
第二行:此时栈中有5个数据,栈顶数据为“1”,栈底数据为“5”。
第三行:调用pop()函数进行出栈操作后5被移除,栈中剩下1-4,调用printf()打印出1-4
第四行:连续调用10次pop(),因为栈中只有4个元素,所以实际只有4次pop生效,调用printf()打印栈为空。