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

一、概念:


    (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的次序进栈,退栈的第一个元素应为栈顶元素。即栈的修改是按后进先出的原则进行的。

                                            

二、 栈的抽象数据类型定义

ADT Stack{  
    数据对象:D ={ ai|ai∈ElemSet,  i=1,2,…,n,n≥0 }  
    数据关系:R ={<ai-1, ai>|ai-1,ai∈D,  i=2,3,…,n }  
    基本操作:初始化、进栈、出栈、取栈顶元素等  
    } ADT Stack 

三、代码


Stack.h

#ifndef __CHelloWorld__Stack__  
#define __CHelloWorld__Stack__  
  
#include <iostream>  
#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 !"<<std::endl;  
        return;  
    };  
    num[top]=x;  
    top++;  
}  
  
float stack::pop(void)  
{  
    top--;  
    if (top<0)  
    {  
        std::cout<<"Stack is underflow !"<<std::endl;  
        return 0;  
    };  
    return num[top];  
}  

main.cpp

#include <iostream>  
#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<<a.pop()<<" ";  
    cout<<endl;  
    //以下利用循环和push()成员函数将键盘输入的数据依次入b栈  
    cout<<"Please input five numbers."<<endl;  
    for (i=1; i<=MAX; i++) {  
        cin>>x;  
        b.push(x);  
    }  
      
    //以下利用循环和pop()成员函数依次弹出b栈中的数据并显示  
    for (i=1; i<=MAX; i++)  
        cout<<b.pop()<<" ";  
      
    // std::cout << "Hello, World!\n";  
    return 0;  
}  

演示效果图:




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


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值