数据结构与算法——顺序栈

今天总结栈的顺序存储结构

什么是栈?

栈是一种线性表,其特点是限定尽在表尾进行插入和删除操作,表尾栈一段也叫栈顶,另一端就是栈底了。既然栈是线性表,那么栈也就有两种存储数据的方式,顺序存储和链式存储。今天实现的是顺序存储的栈,也就顺序栈。

图示(来自百度图片):

顺序栈的实现:

栈的顺序存储还是比较简单的,就是对数组进行操作。

<span style="font-family:Courier New;font-size:14px;">#include <iostream>

using namespace std;
const int StackSize = 1024; //栈的最大高度
template <class T>
class SeqStack {
public:
    SeqStack() {
        top = -1; //空栈时
    }
    void PushStack(T x); //将元素x入栈
    T PopStack(); //出栈
    T GetTop(); //得到栈顶元素
    bool IsEmpty(); //判断栈是否为空
    void PrintStack();
private:
    int top; //栈顶指针
    T data[StackSize];
};

template <class T>
void SeqStack<T>::PushStack(T x) {
    data[++top] = x;  //将x入栈 将top+1
}

template<class T>
void SeqStack<T>::PrintStack() {
    if(IsEmpty()) cout<<"栈为空"<<endl;
    for(int i=top;i>=0;i--) {
        cout<<data[i]<<" ";
    }
    cout<<endl;
}

template<class T>
T SeqStack<T>::PopStack() {
    if(IsEmpty()) cout<<"栈为空";
    return data[top--];  //返回栈顶元素后 将指针下移
}

template<class T>
T SeqStack<T>::GetTop() {
    if(IsEmpty()) {
            return -1;
    }else {
        return data[top];
    }

}
//判断栈是否为空 就是判断top指针是否等于-1
template<class T>
bool SeqStack<T>::IsEmpty() {
    if(top==-1)
        return true;
    else
        false;
}
int main()
{
    SeqStack<int> stack;
    for(int i=0;i<5;i++) {
        stack.PushStack(i);
    }
    cout<<"栈内元素:(按照栈顶到栈底顺序)"<<endl;
    stack.PrintStack();
    cout<<"出栈"<<endl;
    stack.PopStack();
    stack.PrintStack();
    cout<<"获取栈顶元素"<<endl;
    cout<<stack.GetTop()<<endl;
    return 0;
}
</span>
时间: 2024-08-26 01:10:37

数据结构与算法——顺序栈的相关文章

12. C#数据结构与算法 -- 顺序栈

理论基础: 栈(Stack)是操作限定在表的尾端进行的线性表.表尾由于要进行插入.删除等操作,所以,它具有特殊的含义,把表尾称为栈顶(Top),另一端是固定的,叫栈底(Bottom).当栈中没有数据元素时叫空栈(Empty Stack). 栈可以分为顺序栈和链栈. 用一片连续的存储空间来存储栈中的数据元素,这样的栈称为顺序栈(Sequence Stack).类似于顺序表,用一维数组来存放顺序栈中的数据元素.栈顶指示器top设在数组下标为0的端,top随着插入和删除而变化,当栈为空时,top=-1

Java数据结构和算法之栈与队列

二.栈与队列 1.栈的定义 栈(Stack)是限制仅在表的一端进行插入和删除运算的线性表. (1)通常称插入.删除的这一端为栈顶(Top),另一端称为栈底(Bottom). (2)当表中没有元素时称为空栈. (3)栈为后进先出(Last In First Out)的线性表,简称为LIFO表. 栈的修改是按后进先出的原则进行. 每次删除(退栈)的总是当前栈中"最新"的元素,即最后插入(进栈)的元素,而最先插入的是被放在栈的底部,要到最后才能删除. 图1 [示例]元素是以a1,a2,-,a

java数据结构与算法之栈(Stack)设计与实现

[版权申明]转载请注明出处(请尊重原创,博主保留追究权) http://blog.csdn.net/javazejian/article/details/53362993 出自[zejian的博客] 关联文章: java数据结构与算法之顺序表与链表设计与实现分析 java数据结构与算法之双链表设计与实现 java数据结构与算法之改良顺序表与双链表类似ArrayList和LinkedList(带Iterator迭代器与fast-fail机制) java数据结构与算法之栈设计与实现 ??本篇是jav

用JS描述的数据结构及算法表示——栈和队列(基础版)

前言:找了上课时数据结构的教程来看,但是用的语言是c++,所以具体实现在网上搜大神的博客来看,我看到的大神们的博客都写得特别好,不止讲了最基本的思想和算法实现,更多的是侧重于实例运用,一边看一边在心里隐隐歌颂大神的厉害,然后别人的厉害不是我的,所以到底看得各种受打击+头昏脑涨,写这个系列是希望自己能够总结学到东一块.西一下的知识,因为水平有限+经验不足,所以在此只说最基础的思想,附上我自己的算法实现(肯定还有更优解),如果要想看进阶版的,可以在园里搜“数据结构”,各种语言实现和进阶提升的文章有很

数据结构与算法之栈

前言:我也是即学即写的,难免有错误.欢迎之处这篇博文的不足之处. 一.什么是栈? 栈是数据结构的一种,他的原理就是后进先出(先进后出是一样的道理),如图(无图言屌) 看到没,你如果把栈当成一个开口向上的容器的话,你最先存储的a1要想取出来,必须把上面的元素都取出来,而你最后一个存储的a5元素却可以第一个取出来.这就是后进先出. PS:我这里的top是指向栈顶元素的,这里用到的top初值是-1.有的书中(好像是严蔚敏的)的top的初始值是0.所以top指向栈顶元素的上一个存储单元.我个人觉得还是t

数据结构与算法JavaScript 栈(一)

数据结构与算法JavaScript这本书算是讲解得比较浅显的,优点就是用javascript语言把常用的数据结构给描述了下,书中很多例子来源于常见的一些面试题目,算是与时俱进,业余看了下就顺便记录下来吧 git代码下载:https://github.com/JsAaron/data_structure.git 栈结构 特殊的列表,栈内的元素只能通过列表的一端访问,栈顶 先入先出(LFIO,last-in-first-out)的数据结构 javascript提供可操作的方法, 入栈 push, 出

数据结构:C_顺序栈的实现

数据结构顺序栈的实现(C语言版) 1.写在前面 栈是一种遵循元素先进(Push)后出(Pop)规则的线性表,它的实现可以用数组或者链表. ..... 2.代码分解 2.1对栈的结构定义: typedef struct { int *base; int *top; int stacksize; }SqStack; |说明: 1.base表示栈底指针,在判断出栈.初始化和重新分配空间的时候需要用到. 2.top表示栈顶指针,是栈最关键和核心的组成,入栈时top向上移动,出栈时top向下移动. 3.此

数据结构C语言—顺序栈案例—十进制转二进制

1 #include <stdio.h> 2 #include <stdlib.h> 3 #include "SeqStack.h" 4 5 void conversion(int); 6 SeqStack seq; 7 int main() 8 { 9 int n; 10 scanf("%d",&n); 11 conversion(n); 12 return 0; 13 } 14 15 void conversion(int N)

数据结构基础(6) --顺序栈的设计与实现

栈是一种只允许在一端进行插入或删除操作的线性表.其特点为:先进后出(FILO)/后进先出(LIFO); 栈 VS. 队列 栈和队列都是动态集合, 但在栈中, 可以去掉的是最近插入的那一个,:栈实现了一种后进先出(last-in, first-out)的策略;类似的, 在队列中, 可以去掉的元素总是在集合中存在时间最长的那一个:队列实现了先进先出(first-in, first-out)的策略[下一篇我们着重复习队列]. 栈的示意图: //顺序栈的实现与解析 template <typename