weinan030416

导航

栈和队列

栈一般数组和链表两种实现方式

栈:先进后出、尾入尾出

class Stack{
private:
    int *data;//存放栈中的数据
    int maxsize;//栈最大空间
    int top;//栈顶
    
public:
    //默认空间为10
    Stack() //初始化栈
    {
        maxsize = 10;
        data = new int[maxsize];//分配栈空间
        top = -1;//初始化栈顶
    }
    //设置最大空间
    Stack(int max_size) {
        maxsize = max_size;
        data = new int[maxsize];//分配栈空间
        top = -1;//初始化栈顶
    }
    ~Stack() {
        delete data;
    }
    //是否栈空
    bool isEmpty() {
        return (top == -1)?true:false;
    }
    //是否栈满
    bool isFull() {
        return (top >= maxsize)?true:false;
    }
    //进栈
    bool push(int x) {
        if(isFull())
            return false;
        else
            data[++top] = x;
        return true;
    }
    //出栈
    bool pop(int &x) 
    {
        if(isEmpty())
            return false;
        else
            x = data[top--];
        return true;
    }
    //清除栈
    void clear(){
        top = -1;
    }
};

 

队列:先进先出(可以想象为排队)、尾入头出

例子停车场管理

 

struct Car
{
    char t[5];//进入时间 
    int sign;//车牌号
    Car *next;
};

struct Lane
{
    Car *head;
    Car *tail;
    
    Lane()
    {
        head=(Car*)malloc(sizeof(Car));
        tail=head->next;
    }
    
    bool empty()
    {
        return head==tail?true:false;
    }
    
    void push(int tsign)//队尾入 
    {
        tail=(Car*)malloc(sizeof(Car));
        tail->sign=tsign;
        tail=tail->next;
        tail=NULL;//位置加一 
    }
    
    Car* pop()//队头出 
    {
        Car *p=head;
        head=head->next;
        return p;
    }
    
};

 

posted on 2023-01-07 15:54  楠030416  阅读(10)  评论(0编辑  收藏  举报