数据结构(栈和队列)

目录

 

1.栈

2.队列


 

1.栈

#include <iostream>

using namespace std;

template <class T>

class Stack

{

protected:

    T *element;

    int top;

    int capcity;

public:

    Stack()

    {

        top = -1;

        capcity = 2;

        element = new T[capcity];

    }

    ~Stack()

    {

        delete[] element;

    }

    void resize(int newCapcity)

    {

        T *newElement = new T[newCapcity];

        for (int i = 0; i <= top; i++)

            newElement[i] = element[i];

        delete[] element;

        element = newElement;

        capcity = newCapcity;

    }

    void push(T value)

    {

        if (top >= capcity - 1)

            resize(2 * capcity);

        element[++top] = value;

    }

    bool isEmpty()

    {

        if(top==-1)

        return true;

        return false;

    }

    void pop()

    {

        if(isEmpty())

        return ;

        top--;

        if(top<capcity/4)

        resize(capcity/2);

    }

    T get_top()

    {

        if(isEmpty())

        {

            cout<<"Stack is Empty"<<endl;

            return 0;

        }

        return element[top];

    }

    int size()

    {

        return top+1;

    }

};

2.队列

#include <iostream>

using namespace std;

template <class T>

struct Node

{

    T data;

    Node<T> *next;

    Node<T> *prev;

    Node(T _data = 0) : data(_data), next(nullptr), prev(nullptr) {}

};

template <class T>

class Quene

{

    protected:

    Node<T> *pHead;

    Node<T> *pTail;

    int size;

    public:

    Quene():pHead(new Node<T>),pTail(new Node<T>),size(0)

    {

        pHead->next=pTail;

        pTail->prev=pHead;

    }

    ~Quene()

    {

        Node<T>* node=pHead->next;

        while(node!=pTail)

        {

            node=node->next;

            delete node->prev;

        }

        delete pHead;

        delete pTail;

        pHead=nullptr;

        pTail=nullptr;

    }

    void printQuene()

    {

        Node<T> *node = pHead->next;

        while(node != pHead)

        {

            cout << node->data<<endl;

            node = node->next;

        }

    }

    void push(T data)

    {

        Node<T> *Data=new Node<T>(data);

        pTail->prev->next=Data;

        Data->prev=pTail->prev;

        Data->next=pTail;

        pTail->prev=Data;

        size++;

    }

    void pop()

    {

        if(isEmpty())

        return ;

        Node<T> *node=pHead->next;

        pHead->next=node->next;

        node->next->prev=pHead;

        delete node;

        size--;

    }

    bool isEmpty()

    {

        if(!size)

        return true;

        return false;

    }

   T peek()

   {

    if(isEmpty())

    return 0;

    return pHead->next->data;

   }

   int getsize()

   {

    return size;

   }

};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值