c语言gettop函数值,数据结构-栈 C和C++的实现

在数据结构中,栈是一种桶状结构,每次往桶里放数据,最后放的数据最先被拿出来,最先放进去的数据最后才能出来(FILO)

C语言:

C++语言:

一、文件清单:

b95e9b2785de48ea34580d5dbf133a24.png

MyStack.h:

jia.gif

jian.gif

#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(用于测试)

jia.gif

jian.gif

#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就能达到目的。

三、结果:

7c3862363eca5023806f103708b441c5.png

第一行:我们使用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()打印栈为空。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值