栈与队列

作者: Ryanighty | 来源:发表于2017-03-06 12:49 被阅读45次

栈与队列

栈是一种限定仅在一端进行插入和删除的 线性表 ,无论是往栈中插入元素还是删除栈中的元素,或者读取栈中的元素,都只能固定在线性表的一端进行。通常,栈的这一端被称为栈顶(top),与此相对,栈的另一端叫做栈底(bottom)。由此可知,最后插入栈中的元素是最先被删除或读取的元素,而最先压入的元素则被放在栈的底部,要到最后才能取出。换言之,栈的修改是按后进先出的原则进行的。因此,通常栈被称为后进先出(last in first out)表,简称LIFO表。

图1 栈的具体流程

栈的抽象数据类型

下面的C++类模版给出了栈类(名字为Stack,模版参数为元素类型T)的一个抽象数据类型定义。

栈的抽象定义

template <class T>
class Stack
{
public:
    void clear();
    bool push(const T item);
    bool pop(T & item);
    bool top(T & item);
    bool isEmpty();
    bool isFull();
};

栈的具体定义程序

该程序由C++编辑,可以实现 顺序栈 的存储和弹出
具体的栈程序

#include <iostream>  
#define MAX 100//定义数组长度  
using namespace std;  

struct Stack//建立栈  
{  
    int value[MAX];  
    int top;//栈顶的数组序号  
};  

void Init(Stack &s)//初始化栈  
{  
    s.top=-1;  
}  

int Push(Stack &s,int e)//把元素e压入栈顶  
{  
    if(s.top>MAX-1)//如果超出栈的容量,返回0  
        return 0;  
    s.top++;//栈顶加1  
    s.value[s.top]=e;//把e赋给栈顶  
    return 1;  
}  

int IsEmpty(Stack s)//判定栈是否为空  
{  
    if(s.top==-1)  
        return 1;  
    else  
        return 0;  
} 

int Pop(Stack &s,int &m)//取出栈顶元素,并删除栈顶  
{  
    if(s.top==-1)//top等于-1,栈为空  
    {
        cout<<"栈为空,不能读取栈顶元素"<<endl;
        return 0; 
    }
    else
    {
        m=s.value[s.top]; //先取出top元素,再使top-1
        s.top--;
        return 1;  
    }  
} 

int main()  
{  
    Stack slist;  
    Init(slist);
    cout<<"栈是否为空(1为空,0为不空)"<<endl;
    cout<<IsEmpty(slist)<<endl;  
    cout<<"输入"<<endl;  
    int e;
    int m;  
    cin>>e;
    while (e!=0)
    {
            Push(slist,e);
            cout<<"栈是否为空(1为空,0为不空)"<<endl;
            cout<<IsEmpty(slist)<<endl;
            cout<<"获取并弹出栈顶元素:";
            Pop(slist,m);
            cout<<m<<endl;
            cout<<"栈是否为空(1为空,0为不空)"<<endl;
            cout<<IsEmpty(slist)<<endl;
            cin>>e;
    }

    return 0;  
}  

栈的特点

  • 先进后出
  • 具有记忆功能
  • 对栈的插入与删除操作中,不需要改变栈底指针
  • 栈可以使用顺序存储也可以使用链式存储

相关文章

  • Swift 队列&栈 相关操作

    栈 LIFO(后进先出) 队列 FIFO(先进先出) 队列与栈相互的实现 栈 - 队列实现 队列 - 栈实现 相关...

  • 数据结构学习 | 队列和栈

    栈 后进先出 栈顶允许插入(压栈)、删除(弹栈) 应用:数制转换数制转换与栈 队列 先进先出 队列头部允许删除,队...

  • Algorithm小白入门 -- 队列和栈

    队列和栈队列实现栈、栈实现队列单调栈单调队列运用栈去重 1. 队列实现栈、栈实现队列 队列是一种先进先出的数据结构...

  • 常见数据结构

    栈、队列、数组、链表、树、哈希表 栈 与 队列 首先我们需要了解【栈】与【列队】的区别,它们的最大区别就是数据进出...

  • 栈和队列

    用栈定义队列(出入栈) 用队列定义栈(数据队列和辅助队列)

  • LeetCode刷题笔记(三)栈与队列

    三. 栈与队列 python中的栈直接用list实现,队列用deque,需要导入外部包。 155. 最小栈 题目:...

  • 实 验 四 栈和队列

    一、实验目的与要求:## 1、理解栈和队列抽象数据类型。 2、掌握栈和队列的存储结构和操作实现。 3、理解栈和队列...

  • 数据结构的各种代码

    第 02 章 线性表 顺序存储结构 链式存储结构 第 03 章 栈与队列 顺序栈 链栈 两栈共享空间 循环队列 链...

  • 数据结构——栈和队列

    用数组实现栈和队列 用栈实现队列 用队列实现栈 栈和队列的经典算法题最小间距栈宠物收养所 数组实现栈和队列 用数组...

  • 2019-05-12(高数二轮概念梳理与408一轮同时进行)

    今日复习:极限、连续 与栈、队列

网友评论

    本文标题:栈与队列

    本文链接:https://www.haomeiwen.com/subject/vhaygttx.html