运用栈stack类实现简单计算机,C++栈(stack)的模板类实现代码

本文实例为大家分享了C++栈(stack)的模板类实现代码,供大家参考,具体内容如下

1.基本概念

栈中的元素遵守“先进后出”的原则(LIFO,Last In First Out)

只能在栈顶进行插入和删除操作

压栈(或推入、进栈)即push,将数据放入栈顶并将栈顶指针加一

出栈(或弹出)即pop,将数据从栈顶删除并将栈顶指针减一

栈的基本操作有:pop,push,判断空,获取栈顶元素,求栈大小

4e47740f3adef1a31ce0ebd2a49c534d.png

2.构造栈

可以使用数组构造栈,也可以使用单向链表构造,我觉得使用单向链表更加灵活方便,下面的例子我使用单向链表来构造栈。

单向链表的头插法比较适合,链表头作为栈顶:

85f77df9970ca277c8befae7467189af.png

节点的数据结构:

template

struct node

{

T value; //储存的值

node* next;

node() :next(nullptr){} //构造函数

node(T t) :value(t), next(nullptr){}

};

用模板类构造一个简单的stack类:

template

class myStack

{

int cnts; //入栈数量

node *head; //栈的头部

public:

myStack(){ cnts = 0; head = new node; }

void stackPush(T arg); //入栈

T stackPop(); //出栈

T stackTop(); //获取栈顶元素

void printStack(); //打印栈

int counts(); //获取栈内元素个数

bool isEmpty(); //判断空

};

template

void myStack::stackPush(T arg)

{

node *pnode = new node(arg); //申请入栈元素的空间

pnode->next = head->next;

head->next = pnode;

cnts++;

}

template

T myStack::stackPop()

{

if (head->next!=nullptr)

{

node* temp = head->next;

head->next = head->next->next;

T popVal = temp->value;

delete temp;

return popVal;

}

}

template

T myStack::stackTop()

{

if (head->next!=nullptr)

{

return head->next->value;

}

}

template

void myStack::printStack()

{

if (head->next != nullptr)

{

node* temp = head;

while (temp->next != nullptr)

{

temp = temp->next;

cout << temp->value << endl;

}

}

}

template

int myStack::counts()

{

return cnts;

}

template

bool myStack::isEmpty()

{

if (cnts)

return false;

else

return true;

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值