您的位置:首页 > 其它

栈的基本操作

2016-04-07 20:49 357 查看
1、 定义栈的顺序存取结构、定义栈的基本操作(初始化栈、判栈为空、出栈、入栈等)

#ifndef SEQSTACK_H

#define SEQSTACK_H

#include <assert.h>

#include <iostream>

using namespace std;

const int stackIncreament = 30; //栈溢出时扩展空间的增量

template <class T>

class SeqStack{ //顺序栈的类定义

public:

SeqStack(int sz =50);//建立一个空栈

~SeqStack() {delete[]elements;}//析构函数

void Push(const T& x);

//如果IsFull(),则溢出处理;否则把x插入到栈的栈顶。

bool Pop(T& x);

//如果IsEmpty(),则不执行退栈,返回false;否则退掉位于栈顶的元素,返回true,

//退出的元素值通过引用型参数x返回。

bool getTop(T& x) const;

//如果IsEmpty(),则返回false;否则返回true,并通过引用型参数x栈顶元素的值。

bool IsEmpty()const {return (top == -1) ? true : false;}

//如果栈中元素个数等于0,则返回true,否则返回false。

bool IsFull()const {return (top == maxSize-1) ? true : false;}

//如果栈中元素个数等于maxSize,则返回true,否则返回false。

int getSize()const {return top+1;} //函数返回栈中元素个数。

void MakeEmpty() {top = -1;} //清空栈的内容

friend ostream& operator << (ostream& os, SeqStack<T>& s)//输出栈中元素的重载操作 <<

{

//输出栈中元素的重载操作 <<

os << "top = " << s.top << endl; //输出栈顶位置

for (int i = 0; i < s.top; i ++ ) //逐个输出栈中元素的值

os << i << " : " << s.elements[i] << endl;

return os;

}

private:

T *elements; //存放栈中元素的栈数组

int top; //栈顶指针

int maxSize; //栈最大可容纳元素个数

void overflowProcess(); //栈的溢出处理

};

template <class T>

SeqStack<T>::SeqStack(int sz):top (-1), maxSize (sz) {

//建立一个最大尺寸为sz的空栈, 若分配不成功则错误处理。

elements = new T[maxSize]; //创建栈的数组空间

assert(elements != NULL); //断言: 动态存储分配成功与否

};

template <class T>

void SeqStack<T>::overflowProcess() {

//私有函数:扩充栈的存储空间。

T *newArray = new T[maxSize + stackIncreament];

if (newArray == NULL) {cerr << "存储分配失败!" << endl; exit(1);}

for (int i = 0; i <= top; i++) newArray[i] = elements[i];

maxSize = maxSize + stackIncreament;

delete []elements;

elements = newArray;

};

template <class T>

void SeqStack<T>::Push(const T& x) {

//公共函数:若栈不满, 则将元素x插入到该栈的栈顶, 否则溢出处理。

if (IsFull()== true ) overflowProcess(); //栈满则溢出处理

elements[++top] = x; //栈顶指针先加1, 再进栈

};

template <class T>

bool SeqStack<T>::Pop(T& x) {

//公共函数:若栈不空则函数返回该栈栈顶元素的值, 然后栈顶指针退1。

if (IsEmpty() == true) return false; //判栈空否, 若栈空则函数返回

x = elements[top--]; //栈顶指针退1

return true; //退栈成功

};

template <class T>

bool SeqStack<T>::getTop(T& x) const {

//公共函数:若栈不空则函数返回该栈栈顶元素的地址。

if (IsEmpty() == true) return false; //判栈空否, 若栈空则函数返回

return elements[top]; //返回栈顶元素的值

return true;

};

#endif;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: