顺序栈就是用顺序表(数组)实现的栈。其组织形式如下图所示:
下面介绍下我用C++实现的顺序栈,在VC6下调试通过。不足之处还请指正。
1、文件组织
2、ss.h栈类的声明及宏的定义
#ifndef _SS_H_
#define _SS_H_
typedef int dataType;
#define maxSize 100
class stack
{
public:
stack();
//~stack();
void push(dataType var); //压栈
void pop(); //出栈,什么都不返回
dataType stackTop(); //返回栈顶数据,栈顶不变化
bool isEmpty(); //空则返回true,否则返回false
bool isFull(); //满则返回true,否则返回false
private:
dataType s[maxSize]; //顺序表组成的栈空间
int top; //栈顶指针
};
#endif
3、ss.cpp栈类成员函数的定义
#include "ss.h"
stack::stack()
{
top = -1; //表示栈为空
}
void stack::push(dataType var)
{
s[++top] = var; //入栈
}
void stack::pop()
{
--top; //出栈只要将指针向下移
}
dataType stack::stackTop()
{
return s[top]; //s[top]为栈顶数据
}
bool stack::isEmpty()
{
return top == -1; //top为-1时栈为空
}
bool stack::isFull()
{
return top == maxSize-1; //top为maxSize时栈为满
}
4、mian.cpp
#include <iostream>
#include "ss.h"
using namespace std;
int main()
{
stack exp;
//只有栈未满才能压栈
if(!exp.isFull())
{
exp.push(1);
}
//只有栈非空才能取栈顶元素和出栈
if(!exp.isEmpty())
{
cout<<"栈顶数据是: "<<exp.stackTop()<<endl;
exp.pop();
}
if(exp.isEmpty())
{
cout<<"栈为空!"<<endl;
}
return 0;
}