顺序栈的简单操作

今天简单的实现了一下顺序栈,栈的核心函数是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;
}
结果略。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值