C++实现stack【栈】

要求:

//****file: stack.h
/*
对stack进行初始化
检查stack为空,或已满
将整数压入到stack中
从stack里弹出整数
不移除任何袁术,讲过stack的内容输出到标准输出
Stack类的私有成员如下:
一个用于打印错误信息的私有哦成员函数
三个私有数据成员构成了stack类的private实现,此实现为类接口提供支持。

*/

类的实现

 1 #include <iostream>
 2 using namespace std;
 3
 4
 5 class Stack{
 6     public :
 7     enum {MaxStack = 5};
 8     //初始化栈,栈为空
 9     void init () {top = -1;}
10
11     void push (int n){
12         if (isFull()){
13             errMsg("Full stack .cant push");
14             return ;
15         }
16         arr[++top ] =n;
17     }
18
19     int pop() {
20         if (isEmpty () ){
21             errMsg("Empty stack . Popping dummy value.");
22             return dummy_val;
23         }
24
25         return arr[top-- ];
26     }
27     //检查statck是否为空
28     bool isEmpty() {return top <0 ;}
29     //检查stack是否已满
30     bool isFull() {return top >= MaxStack - 1;}
31
32     //dump倾倒 , 按照从stack顶端到底端的次序,依次将Stack的内容输出到标准输出
33     void dump () {
34         for (int i = top; i >= 0; i--)
35             cout << ‘t‘ << arr[i] << ‘\n‘;
36     }
37
38
39     private :
40         void errMsg(const char * msg) const {
41             cerr << "\n*** Stack operation failure : "<< msg << ‘\n‘;
42         }
43
44         int top;
45         int arr[ MaxStack ];
46         int dummy_val;
47
48 };

测试代码如下:

#include <iostream>
#include "stack.h" 

int main() {
    Stack s1;
    s1.init();
    s1.push(9);
    s1.push(4);
    s1.dump();
    cout << "Popping " << s1.pop() << ‘\n‘;
    s1.dump();
    s1.push(8);
    s1.dump();
    s1.pop();s1.pop();
    s1.dump();
    s1.pop();
    s1.dump();
    s1.push(3);
    s1.push(5);
    s1.dump();

    for (unsigned i = 0; i <Stack::MaxStack; i++)
    s1.push(1);
    s1.dump();

    return 0;
}

调试结果:

/*
t4
t9
Popping 4
t9
t8
t9

*** Stack operation failure : Empty stack . Popping dummy value.
t5
t3

*** Stack operation failure : Full stack .cant push

*** Stack operation failure : Full stack .cant push
t1
t1
t1
t5
t3

--------------------------------
Process exited with return value 0
Press any key to continue . . .

*/
时间: 2024-10-12 07:22:20

C++实现stack【栈】的相关文章

Stack栈 Heap堆

Stack(栈) 栈(stack) 又名堆栈,它是一种运算受限的线性表.其限制是仅允许在表的一端进行插入和删除运算.这一端被称为栈顶,相对地,把另一端称为栈底.向一个栈插入新元素又称作进栈.入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素:从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素. 在计算机科学中是限定仅在表尾进行插入或删除操作的线性表.栈是一种数据结构,它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数

Stack(栈)的简单使用

import java.util.Stack; import org.junit.Before; import org.junit.Test; /** * Stack(栈)继承了Vector类,底层实现是数组. * 此处只介绍了Stack自己定义的方法,父类中的方法不再一一介绍. */ public class TestStack { // 定义一个栈 Stack<String> stack; @Before public void before() { // 实例化栈变量 stack = n

STL --&gt; stack栈

stack栈 c++stack(堆栈)是一个容器的改编,它实现了一个先进后出的数据结构(FILO) 使用该容器时需要包含#include<stack>头文件: 定义stack对象的示例代码如下: stack<int>s1; stack<string>s2; stack的基本操作有: 1 s.empty() 如果栈为空返回true,否则返回false 2 s.size() 返回栈中元素的个数 3 s.pop() 删除栈顶元素但不返回其值 4 s.top() 返回栈顶的元素

基于数组实现Java 自定义Stack栈类及应用

栈是存放对象的一种特殊容器,在插入与删除对象时,这种结构遵循后进先出( Last-in-first-out,LIFO)的原则.java本身是有自带Stack类包,为了达到学习目的已经更好深入了解stack栈,自己动手自建java stack类是个很好的学习开始: 自建Java Stack 类 Stack 类: 1 package com.stack; 2 3 import java.util.ArrayList; 4 import java.util.Arrays; 5 6 /** 7 * St

Java 自定义Stack栈类及应用

栈是存放对象的一种特殊容器,在插入与删除对象时,这种结构遵循后进先出( Last-in-first-out,LIFO)的原则.java本身是有自带Stack类包,为了达到学习目的已经更好深入了解stack栈,自己动手自建java stack类是个很好的学习开始: 自建Java Stack 类 Stack 类: package com.stack; import java.util.ArrayList; import java.util.Arrays; /** * Stack Class * @a

java 中的内存分为四个部分:stack(栈),heap(堆),data segment

http://www.qdmm.com/BookReader/113167,54166719.aspx http://www.qdmm.com/BookReader/113167,54166867.aspx http://www.qdmm.com/BookReader/113167,54166868.aspx http://www.qdmm.com/BookReader/113167,54166869.aspx http://www.qdmm.com/BookReader/113167,5416

java集合类——Stack栈类

今日走读代码时,遇到stack栈类,特查看java的API文档,总结如下: Stack继承Vector类. 栈的特点是后进先出. API中Stack自身的方法不多,基本跟栈的特点有关. 现附上例子,后续继续总结 /** * @作者 whs * @创建日期 2015年2月4日 * @版本 V 1.0 */ package thread.pool; import java.util.Stack; public class StackExam { public static void main(Str

Stack栈的三种含义

理解stack栈对于理解程序的执行至关重要.easy混淆的是,这个词事实上有三种含义,适用于不同的场合,必须加以区分. 含义一:数据结构 stack的第一种含义是一组数据的存放方式,特点为LIFO,即后进先出(Last in,first out). 在这样的数据结构中,数据像积木那样一层层堆起来,后面添?的数据就放在最上层.使用的时候,最上层的数据第一个被用掉,这就叫做"后进先出". 与这样的结构配套的是以下几种特定的方法: (1)push:在最顶层添?数据 (2)pop:返回并移除最

Linux上coredump调试:call stack栈顶函数地址为0 分析实战

这几天测试中,又收到了coredump的报告,调用栈如下: (gdb) bt#0  0x0000000000000000 in ?? ()#1  0x0000000000432bb4 in ChargingNode::canProcessed (this=0x7f87b40118e0, maxTimestamp=9000000000) at src/sl/ChargingFile.C:406#2  0x0000000000445de4 in BucketFileAdapter::checkin

Java Stack栈和Heap堆的区别

首先分清楚Stack,Heap的中文翻译:Stack—栈,Heap—堆. 在中文里,Stack可以翻译为“堆栈”,所以我直接查找了计算机术语里面堆和栈开头的词语: 堆存储: heapstorage 堆存储分配: heapstorage allocation 堆存储管理: heap storage management 栈编址: stack addressing 栈变换:stack transformation 栈存储器:stack memory 栈单元: stack cell 接着,总结在Jav