栈和队列

  1. 栈结构定义 & 初始化

    typedef struct Stack{
        int data[MAX_SIZE];
        int top;
    }SqStack;
    
    void InitStack(SqStack &s){
        s.top = -1;     // 栈顶指针指向当前元素位置,初始化为-1
    }
    
  2. 判断栈空

    // 判断栈空
    bool StackEmpty(const SqStack s){
        if(s.top == -1) return true;
        return false;
    }
    
  3. 进栈

    // 进栈
    bool Push(SqStack &s, int x){
        if(s.top == MAX_SIZE - 1) return false; // 栈满
        s.data[++s.top] = x;    // 先移动指针再进栈
        return true;
    }
    
  4. 出栈

    // 出栈
    bool Pop(SqStack &s, int &x){
        if(s.top == -1) return false;           // 栈空
        x = s.data[s.top--];    // 先出栈再移动指针
        return true;
    }
    
  5. 读取栈顶元素

    // 读栈顶元素
    bool GetTop(const SqStack &s, int &x){
        if(s.top == -1) return false;   // 栈空
        x = s.data[s.top];
        return true;
    }
    

队列

  1. 队列结构定义 & 初始化

    typedef struct{
        int data[MAX_SIZE];
        int front, rear;
    }SqQueue;
    
    void InitQueue(SqQueue &q){
        q.front = q.rear = 0;   // front指向队头,rear指向队尾元素的下一个位置
    }
    
  2. 判断队空

    // 判断对空
    bool QueueEmpty(const SqQueue &q){
        if(q.rear == q.front) return true;  // 对空条件rear == front
        return false;
    }
    
  3. 入队

    // 判断对空
    bool QueueEmpty(const SqQueue &q){
        if(q.rear == q.front) return true;  // 对空条件rear == front
        return false;
    }
    
  4. 出队

    // 出队
    bool DnQueue(SqQueue &q, int &x){
        if(q.rear == q.front) return false;     // 队空
        x = q.data[q.front];        // 先出队再+1
        q.front = (q.front + 1) % MAX_SIZE;
        return true;
    }
    
posted @ 2024-04-15 10:59  ZhangFirst1  阅读(17)  评论(0)    收藏  举报