`

栈-顺序栈

阅读更多
SeqStack.h
#ifndef SEQSTACK_H
#define SEQSTACK_H

#include<iostream>
#include<assert.h>
#include"Stack.h"
using namespace std;

const int stackIncrement = 20;
template<typename T>
class SeqStack:public Stack<T>{
public:
    SeqStack(int sz=50);
    ~SeqStack(){delete[]elements;}
    void Push(const T &x);
    bool Pop(T &x);
    bool getTop(T &x) const;
    bool IsEmpty() const{
        return top==-1?true:false;
    }
    bool IsFull() const{
        return top==maxSize-1?true:false;//如果栈顶指针top==maxSize-1说明已满
    }
    int getSize() const{
        return top+1;
    }
    void makeEmpty(){
        top = -1;
    }
    friend ostream& operator<<(ostream& os,SeqStack<T>& s){
        for(int i=0;i<=s.top;++i)
            os << s.elements[i] << " ";
        os << endl;
        return os;
    }

private:
    T *elements;
    int top;//指示最后加入的元素的位置
    int maxSize;
    void overflowProcess();//栈溢出处理
};
#endif // SEQSTACK_H




SeqStack.cpp
#include"SeqStack.h"

template<typename T>
SeqStack<T>::SeqStack(int sz):top(-1),maxSize(sz)
{
    elements = new T[maxSize];
    assert(NULL!=elements);
}

/*
  栈溢出处理
 */
template<typename T>
void SeqStack<T>::overflowProcess()
{
    T *newArray = new T[maxSize+stackIncrement];
    assert(NULL!=newArray);
    for(int i=0;i<=top;++i){//top是从0开始的
        newArray[i] = elements[i];
    }
    maxSize+=stackIncrement;
    delete []elements;
    elements = newArray;
}

template<typename T>
void SeqStack<T>::Push(const T &x)
{
    if(IsFull()){
        overflowProcess();
    }
    top++;
    elements[top]=x;
}

template<typename T>
bool SeqStack<T>::Pop(T &x)
{
    if(not IsEmpty()){
        x = elements[top];
        top--;
        return true;
    }else{
        return false;
    }
}

template<typename T>
bool SeqStack<T>::getTop(T &x) const
{
    if(not IsEmpty()){
        x = elements[top];
        return true;
    }else{
        return false;
    }
}

int main()
{
    SeqStack<int> ss(10);
    for(int i=0;i<10;++i)
        ss.Push(i);
    cout<<ss;
    int num = 0;
    ss.Pop(num);
    cout << ss;
    for(int i=10;i<=20;++i)
        ss.Push(i);
    cout << ss;
}

0 1 2 3 4 5 6 7 8 9 
0 1 2 3 4 5 6 7 8 
0 1 2 3 4 5 6 7 8 10 11 12 13 14 15 16 17 18 19 20 

分享到:
评论

相关推荐

    算法-理论基础- 栈- 顺序栈(包含源程序).rar

    在本资源"算法-理论基础- 栈- 顺序栈(包含源程序).rar"中,我们将深入探讨一种重要的数据结构——栈,以及它的具体实现:顺序栈。 栈是一种具有后进先出(Last In, First Out,简称LIFO)特性的数据结构。在栈中...

    数据结构-基本算法-顺序栈

    数据结构-基本算法-顺序栈(学生时代源码,调试可运行)

    数据结构--顺序栈的基本运算.pdf

    数据结构--顺序栈的基本运算.pdf

    c++数据结构--顺序栈

    ### C++ 实现顺序栈详解 #### 一、引言 在计算机科学中,栈(Stack)是一种只能在一端进行插入或删除操作的线性表,通常被称作“先进后出”(First In Last Out,FILO)或“后进先出”(Last In First Out,LIFO)...

    顺序栈-括号匹配(1).cpp

    顺序栈-括号匹配(1).cpp

    数据结构--顺序栈的基本运算.doc

    数据结构--顺序栈的基本运算 顺序栈是一种基本的数据结构,广泛应用于计算机科学和软件开发领域。顺序栈的基本运算包括初始化顺序栈、判断顺序栈是否为空、依次进栈元素、输出栈长度、输出从栈顶到栈底的元素、读出...

    数据结构(C语言) - 迷宫求解 - 顺序栈

    在本项目中,我们关注的是一个特定的数据结构——顺序栈,以及如何利用它来解决迷宫求解问题。顺序栈是一种线性数据结构,它的元素按顺序排列,操作主要涉及在栈顶进行插入(压栈)和删除(弹栈)。 首先,让我们...

    栈-队列的顺序-链式储存结构(数据结构试验报告).pdf

    * 顺序栈的实现:使用C语言实现顺序栈的操作,包括init函数、push函数、pop函数和print函数。 2. 栈的链式存储结构: * 链栈的定义:使用链表来存储栈元素,每个结点包含数据和指向下一结点的指针。 * 链栈的操作...

    栈的顺序存储结构C实现

    在顺序栈中,元素被存储在一块连续的内存区域中,就像一个数组。这种存储方式使得访问任何位置的元素都非常高效,因为内存地址是连续的,但插入和删除操作可能需要移动元素。以下是顺序栈的基本操作: 1. 创建栈:...

    顺序栈的C语言实现(栈的顺序存储)

    栈的顺序存储即顺序栈是指,用一块连续的内存来存放一个栈,类似于数组,各元素在内存中是一个挨一个的。既然栈也是线性表,那么栈就可以通过线性表来实现,实现顺序栈只需在顺序表的插入删除操作时,只限定在一端...

    《数据结构》--栈的顺序存储和链式存储

    在顺序栈中,我们有以下基本操作: - **压栈(Push)**:当栈未满时,将新元素添加到栈顶。 - **弹栈(Pop)**:移除并返回栈顶元素,如果栈为空,则不允许执行此操作。 - **查看栈顶元素(Peek或Top)**:不移除地...

    数据结构-顺序栈 for linux

    顺序栈是其中一种基础且重要的数据结构,尤其在Linux系统编程中有着广泛的应用。本篇将深入探讨顺序栈的概念、实现以及在Linux环境下的应用。 顺序栈,顾名思ity,是指元素在内存中按线性顺序排列的栈。它类似于一...

    数据结构---栈和队列之顺序栈(C语言)

    在这个主题中,我们将专注于两种基本的线性数据结构:栈和队列,特别是C语言实现的顺序栈。顺序栈是一种在内存中连续分配空间的抽象数据类型,它具有后进先出(LIFO)或先进后出(FILO)的特性。 ### 栈的基本概念 ...

    数据结构-栈的顺序存储

    数据结构是计算机科学中的核心概念,它涉及到如何高效地组织和操作数据。在这个主题中,我们将深入探讨一种特殊的数据...在实际应用中,根据需求选择合适的数据结构,如顺序栈或链式栈,能够有效提升程序的性能和效率。

    漫话数据结构-顺序栈.pptx

    在本文中,我们将深入探讨一种重要的线性结构——顺序栈,以及在其上执行的各种操作。 顺序栈是一种特殊的数据结构,属于线性表的范畴。线性表是由n个相同类型元素构成的有限序列,而在顺序栈中,这些元素是按照...

    Android 模拟Activity进出栈-IT计算机-毕业设计.zip

    这个"Android模拟Activity进出栈-IT计算机-毕业设计.zip"文件包含了一个演示如何模拟Activity在应用程序中按照栈(Stack)行为进行管理的示例项目。这个项目对于理解和实践Android的Activity生命周期以及任务和返回...

    栈:顺序栈和链表栈_C语言项目

    本文将深入探讨一种常用的数据结构——栈,特别是顺序栈和链表栈,它们都是实现栈功能的不同方式。栈通常被称为“后进先出”(LIFO,Last In First Out)的数据结构,广泛应用于各种算法和程序设计中,如表达式求值...

    链式栈---任意四则运算

    链式栈是一种特殊的栈数据结构,它通过动态内存分配实现元素的存储,而非像顺序栈那样受限于数组的固定容量。在本题中,我们利用链式栈来处理任意四则运算,即加法、减法、乘法和除法。这种运算涉及到操作符的优先级...

    顺序栈的表示和实现源码

    顺序栈是一种常见的数据结构,它遵循“后进先出”(LIFO)的原则。在顺序栈中,元素存储在一块连续的内存区域中,通过数组或动态数组来实现。顺序栈的操作通常包括初始化、判断栈是否为空、获取栈顶元素、进栈(压栈...

Global site tag (gtag.js) - Google Analytics