(转载)http://myswirl.blog.163.com/blog/static/51318642200882310239324/

SqStack.h
****************************************
#include <iostream>
using std::cout;
using std::endl;

template <class T>
class SqStack{
    public:
        SqStack(int init=50, int incr=10);
        bool StackEmpty() const;//判断栈是否为空
        T *GetTop() const;//得到栈顶指针
        void StackTraverse() const;
        
        bool Push(T &s);//入栈
        bool Pop(T &p);//出栈
        
        ~SqStack();
    private:
        int size; //允许的最大存储空间以元素为单位
        int increaseSize;//递增大小
        T *base; //存储空间基址
        int top; //栈顶指针,栈元素个数 
};
//构造函数
template <class T>
SqStack<T>::SqStack(int init, int incr){
    size = init; //初始大小
    base = new T[size];
    if(!base)exit(1);//存储分配失败
    increaseSize = incr; //顺序表递增大小
    top = 0;   //空栈中元素个数为0
}

template <class T>
bool SqStack<T>::StackEmpty() const{
    return top == 0;
}
//返回栈顶指针
template <class T>
T *SqStack<T>::GetTop() const{
    if( top == 0 )return NULL;//空栈
    return base+top-1;
}
template <class T>
void SqStack<T>::StackTraverse() const{
    if( top == 0 ){
        cout<<"遍历为空栈"<<endl;
    }else{
        //栈底到栈顶输出
        cout<<"栈底到栈顶: ";
        for(int i=0; i<top; i++){
            cout << *(base+i) << " ";
        }
        cout<<endl;
    }
}
//入栈
template <class T>
bool SqStack<T>::Push(T &s){
    if(top == size)return false; //栈已满,无法进行插入
    *(base + top) = s;//插入新的元素
    ++top;
    return true;
}
//出栈,返回删除元素的指针
template <class T>
bool SqStack<T>::Pop(T &p){
    if( top == 0 )return false;//空栈
    p = *(base+top-1);
    --top;
    return true;
}
//析构函数
template <class T>
SqStack<T>::~SqStack(){
    cout << "调用析构函数" << endl;
    delete base;
    base = NULL;
}
*****************************************

main.cc
**********************************************

#include "SqStack.h"

int main()
{
    SqStack<int> *s = new SqStack<int>;
    
    int a = 0;
    int b = 1;
    int c = 2;
    
    if(s->Push(a)){
        cout << "入栈成功!a"<<endl;
    }
    if(s->Push(b)){
        cout << "入栈成功!b"<<endl;
    }
    
    if( s->GetTop() != NULL ){
        cout << "栈顶元素: " << *(s->GetTop()) << endl;    
    }else{
        cout << "空栈了" <<endl;
    }
    
    s->StackTraverse();
    
    int p;
    if( s->Pop(p)){
        cout << "出栈成功!" << p << endl;
    }else{
        cout << "空栈" << endl;
    }
    
    if( s->GetTop() != NULL ){
        cout << "栈顶元素: " << *(s->GetTop()) << endl;    
    }else{
        cout << "栈顶元素:NULL" <<endl;
    }
    s->StackTraverse();
    return 0;
}

**********************************************

(转载)顺序栈c++实现的更多相关文章

  1. 数据结构:C_顺序栈的实现

    数据结构顺序栈的实现(C语言版) 1.写在前面 栈是一种遵循元素先进(Push)后出(Pop)规则的线性表,它的实现可以用数组或者链表. ..... 2.代码分解 2.1对栈的结构定义: typede ...

  2. D_S 顺序栈的基本操作

    //  main.cpp #include <iostream> using namespace std; #include "Status.h" typedef in ...

  3. 数据结构Java实现05----栈:顺序栈和链式堆栈

    一.堆栈的基本概念: 堆栈(也简称作栈)是一种特殊的线性表,堆栈的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置进行插入和删除操作,而堆栈只允许在固定一端进行插入和删除 ...

  4. 01顺序栈_Stack---(栈与队列)

    #include "stdio.h" #include "stdlib.h" #include "io.h" #include " ...

  5. 把十进制整数转换为r(r=2)进制输出(顺序栈实现)

    上周的第二个作业补上~~ 上周的要求: 1.给出顺序栈的存储结构定义. 2.完成顺序栈的基本操作函数. 1)      初始化顺序栈 2)      实现入栈和出栈操作 3)      实现取栈顶元素 ...

  6. 数据结构之顺序栈SqStack

    顺序栈SqStack 基本操作 Status InitStack()//构造一个空栈S Status DestroyStack()//销毁栈S,S不再存在 Status ClearStack()//把 ...

  7. 顺序栈之C++实现

    顺序栈就是用顺序表(数组)实现的栈.其组织形式如下图所示: 下面介绍下我用C++实现的顺序栈,在VC6下调试通过.不足之处还请指正. 1.文件组织 2.ss.h栈类的声明及宏的定义 #ifndef _ ...

  8. 顺序栈和链式栈(C++实现)

    顺序栈,是一种基于数组的存储表示. 实现类代码如下: template<class T> class SeqStack{ T *element; int top; int maxSize; ...

  9. salesforce零基础学习(七十六)顺序栈的实现以及应用

    数据结构中,针对线性表包含两种结构,一种是顺序线性表,一种是链表.顺序线性表适用于查询,时间复杂度为O(1),增删的时间复杂度为O(n).链表适用于增删,时间复杂度为O(1),查询的时间复杂度为O(n ...

  10. 【小白成长撸】--顺序栈(C语言版)

    // 顺序栈.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h"//test1.0--栈表仅限Int类型 #include <stdio. ...

随机推荐

  1. MFC Tips(一) 在程序内部 保存读取配置

    //保存 CWinApp *pApp = AfxGetApp(); pApp->WriteProfileBinary(..); //保存结构体 pApp->WriteProfileInt( ...

  2. PAT_1046 划拳

    啦啦啦.今天晚上火车回学校了.= =还是挺舍不得家里的. 题目描述: 划拳是古老中国酒文化的一个有趣的组成部分.酒桌上两人划拳的方法为:每人口中喊出一个数字,同时用手比划出一个数字.如果谁比划出的数字 ...

  3. MongoDB笔记(一)MongoDB概述和安装

    概述 关键词:关系数据库.非关系数据库 关系数据库: 关系数据库,是建立在关系数据库模型基础上的数据库,借助于集合代数等概念和方法来处理数据库中的数据.目前主流的关系数据库有oracle.SQL.ac ...

  4. Thrift 应用场景(收集版)

    官网: http://thrift.apache.org/ 一些介绍使用的文章: http://www.ibm.com/developerworks/cn/java/j-lo-apachethrift ...

  5. Lambda Expression In Java

     题记在阅读JDK源码java.util.Collections的时候在UnmodifiableCollection类中看到了这么一段代码: public void forEach(Consumer& ...

  6. Sqlserver知识点1

    1.字符串     字符数据类型是SQL Server 中最常用的数据类型之一,它可以用来存储各种字母.数字符号和特殊符号.在使用字符数据类型时,需要在其前后加上英文单引号或者双引号. (1)char ...

  7. which命令

    which指令会在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果. 格式 which 可执行文件名称 参数 -V  显示版本信息 实例 用 which 去找出 which w ...

  8. JavaScript实现url地址自动检测并添加URL链接示例代码

    写一个简单的聊天系统,发出Htpp的Url实现跳转加上a标签,下面是具体的实现,感兴趣的朋友不要错过 背景:写一个简单的聊天系统,发出Htpp的Url实现跳转加上a标签.  实现代码: 复制代码代码如 ...

  9. Mysql锁机制和事务控制

    如何加锁 锁定表的语法:    LOCK TABLES    tbl_name [AS alias] {READ [LOCAL] | [LOW_PRIORITY] WRITE}    [, tbl_n ...

  10. #Leet Code# Best Time to Buy and Sell Stock

    描述:数组 A,对于 i < j, 找到最大的 A[j] - A[i] 代码: class Solution: # @param prices, a list of integer # @ret ...