一、概念:
栈(Stack):是限制在表的一端进行插入和删除操作的线性表。又称为后进先出(LIFO(Last In First Out)或先进后出(FILO(First In Last Out)线性表。
栈顶(Top):允许进行插入、删除操作的一端,又称为表尾。用栈顶指针(top)来指示栈顶元素。
栈底(Bottom):是固定端,又称为表头。
空栈:当表中没有元素时称为空栈。
设栈S=(a1,a2,…an),则a1称为栈底元素,an为栈顶元素,如图3-1所示。
栈中元素按a1,a2,…an的次序进栈,退栈的第一个元素应为栈顶元素。即栈的修改是按后进先出的原则进行的。
二、 栈的抽象数据类型定义
< http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHByZSBjbGFzcz0="brush:java;">ADT Stack{ 数据对象:D ={ ai|ai∈ElemSet, i=1,2,…,n,n≥0 } 数据关系:R ={
三、代码
Stack.h
#ifndef __CHelloWorld__Stack__ #define __CHelloWorld__Stack__ #includeStack.cpp#define MAX 5 class stack { //数据成员 float num[MAX]; //存放栈数据的数组 int top; //指示栈顶位置的变量 public: void init(void); //初始化函数 void push(float x); //入栈函数 float pop(void); //出栈函数 }; #endif /* defined(__CHelloWorld__Stack__) */
#include "Stack.h"
void stack::init(void)
{
top = 0;
}
void stack::push(float x)
{
if (top==MAX)
{
std::cout<<"Stack is full !"<
main.cpp
#include
#include "Stack.h"
using namespace std;
int main(int argc, const char * argv[])
{
//声明变量和对象
int i;
float x;
stack a,b; //声明(创建)栈对象
//以下对栈对象初始化
a.init();
b.init();
//以下利用循环和push()成员函数将2,4,6,8,10依次入a栈对象
for (i=1; i<=MAX; i++)
a.push(2*i);
//以下利用循环和pop()成员函数依次弹出a栈中的数据并显示
for (i=1; i<=MAX; i++)
cout<
>x; b.push(x); } //以下利用循环和pop()成员函数依次弹出b栈中的数据并显示 for (i=1; i<=MAX; i++) cout<
演示效果图:

参考书籍:《C/C++常用算法手册》 《数据结构-清华大学严蔚敏》