C++模板实现顺序栈

 更新时间:2020年04月27日 14:24:07   作者:老樊Lu码  
这篇文章主要为大家详细介绍了C++模板实现顺序栈,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

顺序栈:利用一组连续的存储单元依次存放自栈底到栈顶的数据元素;由于栈顶元素是经常变动的,所以附设top指示栈顶元素在顺序表中的位置,同时也需要知道顺序栈存储空间的起始位置,因此还需设定一个base指针用来指示栈空间的起始位置。

一般约定top指针指向栈顶元素的下一个位置,即新数据元素将要插入得位置。

下面我们使用模板简单实现一个顺序栈:

SeqStack.h

template<typename Type> class SeqStack{
public:
 SeqStack(int sz):m_ntop(-1),m_nMaxSize(sz){
 m_pelements=new Type[sz];
 if(m_pelements==NULL){
  cout<<"Application Error!"<<endl;
  exit(1);
 }
 }
 ~SeqStack(){
 delete[] m_pelements;
 }
 
public:
 
 void Push(const Type item); //push data
 Type Pop();         //pop data
 Type GetTop() const;    //get data
  void Print();        //print the stack
 void MakeEmpty(){      //make the stack empty
 m_ntop=-1;
 }
 bool IsEmpty() const{
 return m_ntop==-1;
 }
 bool IsFull() const{
 return m_ntop==m_nMaxSize-1;
 }
 
 
private:
 int m_ntop;
 Type *m_pelements;
 int m_nMaxSize;
 
};
 
template<typename Type> void SeqStack<Type>::Push(const Type item){
 if(IsFull()){
 cout<<"The stack is full!"<<endl;
 return;
 }
 m_pelements[++m_ntop]=item;
}
 
template<typename Type> Type SeqStack<Type>::Pop(){
 if(IsEmpty()){
 cout<<"There is no element!"<<endl;
 exit(1);
 }
 return m_pelements[m_ntop--];
}
 
template<typename Type> Type SeqStack<Type>::GetTop() const{
 if(IsEmpty()){
 cout<<"There is no element!"<<endl;
 exit(1);
 }
 return m_pelements[m_ntop];
}
 
template<typename Type> void SeqStack<Type>::Print(){
 cout<<"bottom";
 for(int i=0;i<=m_ntop;i++){
 cout<<"--->"<<m_pelements[i];
 }
 cout<<"--->top"<<endl<<endl<<endl;
}

Main.cpp

#include<iostream>
using namespace std;
 
#include "SeqStack.h"
 
int main(){
 SeqStack<int> stack(10);
 int init[10]={1,2,6,9,0,3,8,7,5,4};
 for(int i=0;i<10;i++){
 stack.Push(init[i]);
 }
 stack.Print();
 
 stack.Push(88);
 
 cout<<stack.Pop()<<endl;
 stack.Print();
 
 stack.MakeEmpty();
 stack.Print();
 
 stack.Pop();
 return 0;
}

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

相关文章

  • C语言详细讲解常用字符串处理函数

    C语言详细讲解常用字符串处理函数

    在日常编程中,对于字符串的操作中我们都很习惯的使用一些C库中自带的函数,并且关于字符串的操作函数基本都在 string.h 这个头文件中。关于C库字符串常用处理函数也是平时面试或者考试过程中非常喜欢考的,本文将带大家手动来实现这些常用函数
    2022-05-05
  • C语言编程函数指针入门精讲教程

    C语言编程函数指针入门精讲教程

    大家在C语言的学习中一定会接触指针这样一个东西,而指针也是新手路上一定要消灭的boss,如果以后还要学习Java的同学更是要注重指针的学习,希望能够有所帮助
    2021-10-10
  • C++实现LeetCode(126.词语阶梯之二)

    C++实现LeetCode(126.词语阶梯之二)

    这篇文章主要介绍了C++实现LeetCode(126.词语阶梯之二),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • 使用OpenCV检测图像中的矩形

    使用OpenCV检测图像中的矩形

    这篇文章主要为大家详细介绍了使用OpenCV检测图像中的矩形,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-07-07
  • c语言printf实现同一位置打印输出的实例

    c语言printf实现同一位置打印输出的实例

    下面小编就为大家带来一篇c语言printf实现同一位置打印输出的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • C语言双指针多方法旋转数组解题LeetCode

    C语言双指针多方法旋转数组解题LeetCode

    这篇文章主要为大家介绍了C语言双指针使用多方法旋转数组题解LeetCode,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2022-02-02
  • C语言实现新生入学登记系统

    C语言实现新生入学登记系统

    这篇文章主要为大家详细介绍了C语言实现新生入学登记系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • C++任意线程通过hwnd实现将操作发送到UI线程执行

    C++任意线程通过hwnd实现将操作发送到UI线程执行

    做Windows界面开发时,经常需要在多线程环境中将操作抛到主线程执行,下面我们就来学习一下如何在不需要重新定义消息以及接收消息的情况下实现这一要求,感兴趣的可以了解下
    2024-03-03
  • C++实现将数据写入Excel工作表的示例代码

    C++实现将数据写入Excel工作表的示例代码

    直观的界面、出色的计算功能和图表工具,使Excel成为最流行的个人计算机数据处理软件。在本文中,您将学习如何使用 Spire.XLS for C++ 创建 Excel 文档,以及如何将数据写入 Excel 工作表
    2023-03-03
  • C++中的异常实例详解

    C++中的异常实例详解

    异常处理是C++的一项语言机制,用于在程序中处理异常事件,下面这篇文章主要给大家介绍了关于C++中异常的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-02-02

最新评论