顺序栈

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;
}
Test.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;
}
时间: 2024-08-24 10:25:17

顺序栈的相关文章

顺序栈入栈时输入入栈元素回车之后不能够运行,需要再输入个字节才能运行。预计主函数存在问题。

问题描述 顺序栈入栈时输入入栈元素回车之后不能够运行,需要再输入个字节才能运行.预计主函数存在问题. #include #include #define MAXSIZE 100 //顺序栈的存储空间的初始分配量 #define SElemType int typedef struct { SElemType *base; SElemType *top; int stacksize; } SqStack; //栈的初始化 void InitStack(SqStack *S) { S->base=(

顺序栈的实现示例

栈的顺序实现例子 #ifndef STACK_H_INCLUDED #define STACK_H_INCLUDED #include "ds.h" //for Status,OK ... #ifndef ElemType #define ElemType int /* 数据元素类型默认为 int */ #define ELEMTYPE_TAG #endif #define SElemType ElemType /////////////////////////////////////

小菜一步一步学数据结构之(五)顺序栈

定义 只能在表的一端(栈顶)进行插入和删除运算的线性表 逻辑结构 一对一关系 存储结构 用顺序栈或链栈存储均可,但以顺序栈更常见 运算规则 只能从栈顶运算,且访问结点时依照后进先出(LIFO)或后进后出(FILO)的原则 实现方法 关键是编写入栈和出栈函数,具体实现依顺序栈或链栈的不同而不同 基本操作 入栈 出栈 读栈顶元素值 建栈 判断栈满 栈空 栈与一般线性表的区别 栈是一种特殊的线性表,它只能在表的一端(栈顶)进行插入或删除运算 ** 一般线性 表 栈 逻辑结构 一对一 一对一 存储结构

【数据结构之旅】顺序栈的定义、初始化、空栈判断、入栈、出栈操作

说明:     往前学习数据结构,想运行一个完整的顺序栈的程序都运行不了,因为书上给的都是一部分一部分的算法,并没有提供一个完整可运行的程序,听了实验课,自己折腾了一下,总算可以写一个比较完整的顺序栈操作的小程序,对于栈也慢慢开始有了感觉.下面我会把整个程序拆开来做说明,只要把这些代码放在一个文件中,用编译器就可以直接编译运行了. 一.实现 1.程序功能   关于栈操作的经典程序,首当要提及进制数转换的问题,利用栈的操作,就可以十分快速地完成数的进制转换. 2.预定义.头文件导入和类型别名   

c++-顺序栈的成员函数问题

问题描述 顺序栈的成员函数问题 析构函数-SeqStack( ) {delete[ ]elements;}函数体中删除的是头指针还是删除了数组? 解决方案 删除的是数组.

c++-顺序栈中的重载操作&amp;amp;lt;&amp;amp;lt;

问题描述 顺序栈中的重载操作<< template osrtream& operator<<(ostream& os,SeqStack&s){ os<<"top="<<s.top<<endl; for(int i=0;i<=s.top;i++) os<<i<<":"<<s.elements[i]<<endl; return os;

c++-顺序栈中的清空栈的函数

问题描述 顺序栈中的清空栈的函数 清空栈函数函数体中为何另top=-1,就可清空栈,栈的数据元素不还在内存里吗?怎么能算清空 解决方案 数据虽然还在原来的位置没有消失,但是已经不属于栈的管理范围了 解决方案二: 数组实现的数据还在,在计算机中很多时候都是这样的思想,top= -1就表示了栈已经为空了.比如说当我们删除一个文件时我们直接删除文件的索引,就认为这个文件删除了,但文件的本身的内容并没有删除. 解决方案三: 看你是怎么实现的堆栈,如果是数组,这么做就可以了.如果是动态分配的空间,这么做会

【数据结构之旅】顺序栈入门操作

说明:     书中已有关于顺序栈的类型定义.栈初始化.入栈操作,显然这些都是比较理论的算法,书中并没有给出一个完整可以执行的例子,这对初学者学习在理解上会有一定的难度,因此,需要编写一个简单的例子来理解栈的最基本操作. 1.程序功能     通过使用栈来编写一个程序,实现两个数的交换. 2.程序代码及注释     代码及注释如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 3

c语言-@C语言数据结构大神:顺序栈求n!。13行的错误怎么修改?为啥说我定义栈错误?

问题描述 @C语言数据结构大神:顺序栈求n!.13行的错误怎么修改?为啥说我定义栈错误? # include<stdio.h> # include<stdlib.h> # define Max_Size 50 typedef struct{//typedef是小写开头! //注意此处的top是整形指针 int data[Max_Size]; int top; }SeqStack,*PSeqStack; void Init_SeqStack(PSeqStack S) { S->

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

一.堆栈的基本概念: 堆栈(也简称作栈)是一种特殊的线性表,堆栈的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置进行插入和删除操作,而堆栈只允许在固定一端进行插入和删除操作. 先进后出:堆栈中允许进行插入和删除操作的一端称为栈顶,另一端称为栈底.堆栈的插入和删除操作通常称为进栈或入栈,堆栈的删除操作通常称为出栈或退栈. 备注:栈本身就是一个线性表,所以我们之前讨论过线性表的顺序存储和链式存储,对于栈来说,同样适用.   二.堆栈的抽象数据类型: 数据集合: 堆栈的