c/c++常用算法(3) -- 数据结构(栈)

2014-11-24 07:11:04 · 作者: · 浏览: 0

一、概念:


栈(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 ={ |ai-1,ai∈D, i=2,3,…,n } 基本操作:初始化、进栈、出栈、取栈顶元素等 } ADT Stack

三、代码


Stack.h

#ifndef __CHelloWorld__Stack__
#define __CHelloWorld__Stack__

#include 
  
   
#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__) */
  
Stack.cpp

#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++常用算法手册》 《数据结构-清华大学严蔚敏》