算法学习日记----栈的编辑

本文介绍了一种使用模板实现栈的数据结构方法,包括数组栈和链表栈的具体实现细节。通过对基类Linearlist的继承和抽象栈类的设计,实现了栈的基本操作如push、pop等,并提供了错误处理机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#ifndef STRUCTSTACK
#define STRUCTSTACK


#include<iostream>
#include<vector>

using namespace std;
int counter=0;

/***************定义错误类*****************/


class illegal
{
public:
    illegal(){};
};


/****************定义基类,内部都是虚函数*****************/

template<class T>
class Linearlist
{
public:
    virtual ~Linearlist(){};
    virtual bool empty() const=0;
    virtual T& get(int theIndex) const =0;
    virtual int indexof(const T& theElementof) =0;
    virtual void erase(int theIndex) =0;
    virtual void insert(int theIndex,const T& theElement)=0;
    virtual void output(ostream &out)=0;
};


/*************用基类Linearlist定义arrayList**************/

template<class T>
class Arraylist : public Linearlist<T>
{
public:
    Arraylist(int Maxsize){}
private:
    T* element;
    int arraylength;
    int listsize;
};


/*****************节点类定义******************/
template<class T>
struct ChainNode
{

    ChainNode<T> *next;
    T element;

    ChainNode(){}
    ChainNode(const T& element)
        {this->element=element;}
    ChainNode(const T& element,ChainNode<T> *next)
    {
        this->element=element;
        this->next=next;
    }
};

/******************抽象栈定义**********************/
template<class T>
class stack
{
public:
    virtual ~stack() {}
    virtual bool empty()=0;
    virtual void push(const T& theElement)=0;
    virtual void pop()=0;
    virtual int size()=0;
    virtual T& top()=0;
};
/********************数组栈定义******************/
template<class T>
class stackarray : public stack<T>
{
public:
    stackarray(int Initalsize=10)
    {
        stacksize=Initalsize;
        array=new T[Initalsize];
        stacktop=-1;
    }
    ~stackarray(){delete [] array;}
    bool empty(){return stacktop==-1;}
    int size()
    {
        return stacktop+1;
    }
    T& top()
    {
        if(stacktop==-1)
            throw illegal();
        else
            return array[stacktop];
    }
    void push(const T& theElement);
    void pop()
    {
        if(stacktop==-1)
            throw illegal();
        array[stacktop--].~T();
    }

private:
    int stacksize;
    int stacktop;
    T *array;

};

template<class T>
void stackarray<T>::push(const T& element)
{
    if(stacktop+1==stacksize)
    {
        delete [] array;
        array=new T[stacksize*2];
        stacksize*=2;
    }
    array[++stacktop]=element;
}
/********************链表栈定义******************/
template<class T>
class stacklist : public stack<T>
{
public:
    stacklist(){stacktop=NULL;stacksize=0;}
    ~stacklist();
    bool empty()
        {return stacksize==0;}
    int size(){return stacksize;}
    T& top()
    {
        if(stacksize==0)
            throw illegal();
        else
            return stacktop->element;
    }
    void pop();
    void push(const T& element)
    {
        stacktop=new ChainNode<T>(element,stacktop);
        stacksize++;
    }
private:
    ChainNode<T> *stacktop;
    int stacksize;
};

template<class T>
void stacklist<T>::pop()
{
    ChainNode<T> text;
    if(stacksize==0)
        throw illegal();
    else
        text=stacktop->next;
        delete stacktop;
        stacktop=text;
        stacksize--;
}

template<class T>
stacklist<T>::~stacklist()
{
    ChainNode<T> *nextnode;
    while(stacktop!=NULL)
    {
        nextnode=stacktop->next;
        delete stacktop;
        stacktop=nextnode;
    }
}


#endif // STRUCTSTACK

资源下载链接为: https://pan.quark.cn/s/22ca96b7bd39 在当今的软件开发领域,自动化构建与发布是提升开发效率和项目质量的关键环节。Jenkins Pipeline作为一种强大的自动化工具,能够有效助力Java项目的快速构建、测试及部署。本文将详细介绍如何利用Jenkins Pipeline实现Java项目的自动化构建与发布。 Jenkins Pipeline简介 Jenkins Pipeline是运行在Jenkins上的一套工作流框架,它将原本分散在单个或多个节点上独立运行的任务串联起来,实现复杂流程的编排与可视化。它是Jenkins 2.X的核心特性之一,推动了Jenkins从持续集成(CI)向持续交付(CD)及DevOps的转变。 创建Pipeline项目 要使用Jenkins Pipeline自动化构建发布Java项目,首先需要创建Pipeline项目。具体步骤如下: 登录Jenkins,点击“新建项”,选择“Pipeline”。 输入项目名称和描述,点击“确定”。 在Pipeline脚本中定义项目字典、发版脚本和预发布脚本。 编写Pipeline脚本 Pipeline脚本是Jenkins Pipeline的核心,用于定义自动化构建和发布的流程。以下是一个简单的Pipeline脚本示例: 在上述脚本中,定义了四个阶段:Checkout、Build、Push package和Deploy/Rollback。每个阶段都可以根据实际需求进行配置和调整。 通过Jenkins Pipeline自动化构建发布Java项目,可以显著提升开发效率和项目质量。借助Pipeline,我们能够轻松实现自动化构建、测试和部署,从而提高项目的整体质量和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值