顺序栈的简单操作

今天简单的实现了一下顺序栈,栈的核心函数是push(),top(),pop()。首先是我自己编写的栈,后面是STL标准库调用栈函数。

sqstack.h

//栈的简单实现lifo
#ifndef SQSTACK_H_
#define SQSTACK_H_
const int DEFAULT_SIZE=10;
#include <iostream>
using std::cout;
using std::endl;
template <typename T>
class Sqstack
{
protected:
	int count;
	int maxSize;
	T *elem;
	//辅助
	void Init(int size);
	bool Full();
public:
	Sqstack(int size=DEFAULT_SIZE);
	virtual ~Sqstack();
	void Clear();
	int Length() const;
	bool IsEmpty();
	//void GetElem(int position, T &e);
	//Sqstack<T> &InsertElem(int position, T &e);
	//Sqstack<T> &DeleteElem(int position, T e);
	//Sqstack<T> &SetElem(int position, T &e);
	T top();
	void push(const T e);
	T pop();
	Sqstack(const Sqstack<T> &copy);
	Sqstack<T> &operator =(const Sqstack<T> &copy);
};
template<typename T>
void Sqstack<T>::Init(int size)
{
	maxSize=size;
	if(elem!=NULL)
	{
		Clear();
	}
	elem=new T[maxSize];
	count=0;
}
template <typename T>
bool Sqstack<T>::Full()
{
	return Length()==maxSize;
}
template<typename T>
Sqstack<T>::Sqstack(int size)
{
	elem=NULL;
	Init(size);
}
template <typename T>
Sqstack<T>::~Sqstack()
{
	Clear();
	delete []elem;
}
template <typename T>
void Sqstack<T>::Clear()
{
	count=0;
}
template <typename T>
int Sqstack<T>::Length() const
{
	return count;
}
template <typename T>
bool Sqstack<T>::IsEmpty()
{
	return count==0;
}
template <typename T>
T Sqstack<T>::top()
{
	if(IsEmpty())
	{
		return NULL;
	}
	else
		return elem[count-1];
}
template <typename T>
void Sqstack<T>::push(const T e)
{
	if(Full())
	{
		cout<<"栈已满,无法压栈!"<<endl;
	}
	else
	{
		elem[count++]=e;
	}
}
template <typename T>
T Sqstack<T>::pop()
{
	if(IsEmpty())
	{
		cout<<"栈为空,弹不出来!";
		return -1;
	}
	else
	{
		T e;
		e=elem[count-1];
		--count;
		return e;
	}

}
template <typename T>
Sqstack<T>::Sqstack(const Sqstack<T> &copy)
{
	Init(copy.maxSize);
	for(int curPosition=0; curPosition<copy.count; curPosition++)
	{
		elem[curPosition]=copy.elem[curPosition];
		count++;
	}
}
template <typename T>
Sqstack<T> &Sqstack<T>::operator =(const Sqstack<T> &copy)
{
	if(this!=copy)
	{
		Init(copy.maxSize);
		for(int curPosition=0; curPosition<copy.count; curPosition++)
		{
			elem[curPosition]=copy.elem[curPosition];
			count++;
		}
	}
}
template <typename T>
std::ostream &operator<<(std::ostream &os, Sqstack<T> &Stack)
{
	int Len=Stack.Length();
	for(int curPosition=0; curPosition<Len; curPosition++)
	{
		cout<<Stack.pop()<<" ";
	}
	cout<<endl;
	return os;
}
#endif

stacklist.cpp

// Stacklist.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "sqstack.h"
#include <iostream>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	Sqstack<int> Stack;
	Stack.push(1);
	Stack.push(2);
	Stack.push(3);
	int a=Stack.top();
	cout<<"取栈顶值为:"<<a<<endl;
	//int e=Stack.pop();
	//cout<<"弹出值为:"<<e<<endl;
	//cout<<Stack;
	Sqstack<int> copy(Stack);
	Sqstack<int> copy1=copy;
	cout<<"倒叙输出栈:"<<copy;
	cout<<"倒叙输出栈:"<<copy1;
	system("pause");
	return 0;
}

接下来是调用STL标准库中的STACK实现:

// stack.cpp : 定义控制台应用程序的入口点。
//

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

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	stack<int> s1;
	for(int i=0; i<5; i++)
	{
		s1.push(i);
	}
	cout<<"s1.top is: "<<s1.top()<<endl;
	cout<<"倒叙输出为:";
	while(s1.size())
	{
		cout<<s1.top()<<" ";
		s1.pop();//无返回值,仅仅是弹出数据
	}
	cout<<endl;
	system("pause");
	return 0;
}

结果略。

时间: 2024-11-13 20:41:12

顺序栈的简单操作的相关文章

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

数据结构顺序栈的实现(C语言版) 1.写在前面 栈是一种遵循元素先进(Push)后出(Pop)规则的线性表,它的实现可以用数组或者链表. ..... 2.代码分解 2.1对栈的结构定义: typedef struct { int *base; int *top; int stacksize; }SqStack; |说明: 1.base表示栈底指针,在判断出栈.初始化和重新分配空间的时候需要用到. 2.top表示栈顶指针,是栈最关键和核心的组成,入栈时top向上移动,出栈时top向下移动. 3.此

顺序栈的初始化入栈出栈以及打印栈的信息

使用的开发工具CLion CLion 2017.2.1 Build #CL-172.3544.40, built on August 2, 2017Licensed to CLion EvaluatorExpiration date: September 15, 2017JRE: 1.8.0_152-release-915-b6 x86_64JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.oMac OS X 10.12.4   1 #include

数据结构之顺序栈(C++版)

#include <iostream>#include <stdlib.h>#define MAXLISTSIZE 100 //预设的存储空间最大容量using namespace std; typedef string ElemType;typedef struct{ ElemType *base; //存储空间基址 int top; //栈顶指针 int stacksize; //允许的最大存储空间以元素为单位}Stack; void InitStack(Stack &

C++模板实现动态顺序表(更深层次的深浅拷贝)与基于顺序表的简单栈的实现

前面介绍的模板有关知识大部分都是用顺序表来举例的,现在我们就专门用模板来实现顺序表,其中的很多操作都和之前没有多大区别,只是有几个比较重要的知识点需要做专门的详解. 1 #pragma once 2 #include<iostream> 3 #include<string> 4 #include<stdlib.h> 5 using namespace std; 6 7 template <class T> 8 class Vector 9 { 10 publ

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

说明: 书中已有关于顺序栈的类型定义.栈初始化.入栈操作,显然这些都是比较理论的算法,书中并没有给出一个完整可以执行的例子,这对初学者学习在理解上会有一定的难度,因此,需要编写一个简单的例子来理解栈的最基本操作. 1.程序功能 通过使用栈来编写一个程序,实现两个数的交换. 2.程序代码及注释 代码及注释如下: #include<stdio.h> #include<stdlib.h>    //导入stdlib.h模块是为了使用sizeof函数 typedef struct{    

PHP实现简单顺序栈

栈与数组:php数组也有压入压出的方法array_push 和array_shift.是不是数组就是栈数据结构?或者明明数组就可完成,为何还要栈 解答:去全国各地都可以用双腿走到,为何选择火车飞机?数组就是腿,栈就是火车飞机.首先不相等,其次栈可以让我们集中精力去解决更加核心的业务需求. 简单顺序栈实现 class Data{    private $data;     public function __construct($data){         $this->data=$data; 

顺序栈操作--数据结构(C++)版

最近学习数据结构,一开始接触感觉好难,颓废了一段时间,后来又重新翻开学习,突然感觉到很大的兴趣.对这些代码的运用都有了 一些新的认识.下面简单的讲述下最新学到的顺序栈,不知道大家学习的时候会不会有感觉,书上写的那么简单,但是我写的都是不对,不是这里有错就是那里有错,最后还是攻克了,心理慢慢地成就感. 题目大概:输入一串整数,如果 该数不等于-1,就进栈,若是等于-1,则输出栈顶整数并出栈.同时算法给出应对异常的情况. 代码实现 #include <stdio.h>#include <st

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

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

栈操作之顺序栈

数据结构: 栈是允许在同一端进行插入和删除操作的特殊线性表.允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom):栈底固定,而栈顶浮动:栈中元素个数为零时称为空栈.插入一般称为进栈(PUSH),删除则称为退栈(POP).栈也称为后进先出表. 操作系统: 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈 栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放. 具体操作有:初始化 判断栈满 判断栈空 push po