栈 & 队列

栈—Stack

定义

栈是限定仅在表尾进行插入和删除操作的线性表

允许插入和删除的一端称为栈顶,另一端称为栈底

不含任何数据元素的栈称为空栈

栈又称为后进先出线性表,简称 L I F O LIFO LIFO结构(Last In First Out),或者称为先进后出,简称 F I L O FILO FILO结构(First In Last Out)

图示

在这里插入图片描述

栈操作

结构体

struct Node {
    int data;
    Node *next;
};
struct Stack {
    Node *top;
    int count;
};

初始化栈

//初始化栈
void InitStack(Stack *s) { 
    s->count = 0;
    s->top = NULL;
}

入栈

//入栈
void Push(Stack *s, int n) { 
    Node *p = new Node;
    p->data = n;
    p->next = s->top;
    s->top = p;
    s->count++;
}

出栈

//出栈
void Pop(Stack *s) { 
    Node *p = new Node;
    p = s->top;
    s->top = s->top->next;
    free(p);
    s->count--;
}

打印栈

//打印栈
void Print(Stack *s) { 
    Node *p = s->top;
    while (p) {
        cout << p->data << " ";
        p = p->next;
    }
    cout << endl;
}

队列—Queue

定义

队列是只允许在一端进行插入操作,在另一端进行删除操作的线性表

队列是一种先进先出的线性表,简称 F I F O FIFO FIFO

允许插入的一端称为队尾,允许删除的一端称为队头

图示

在这里插入图片描述

队列操作

结构体

struct Node {
    int data;
    Node *next;
};
struct Queue {
    Node *front,*rear;
};

初始化队列

//初始化队列
void InitQueue(Queue *q){ 
    Node *p = new Node;
    p->next = NULL;
    q->front=q->rear=p;
}

入队

//入队
void EnQueue(Queue *q,int n){ 
    Node *p = new Node;
    p->data = n;
    p->next = NULL;
    q->rear->next = p;
    q->rear = p;
}

出队

//出队
void DeQueue(Queue *q){ 
    Node *p = new Node;
    p = q->front->next;
    if(p){
        q->front->next = p->next;
    }else{
        q->front = q->rear;
    }
    free(p);
}

打印队

//打印队列
void Print(Queue *q){ 
    Node *p = new Node;
    p = q->front->next;
    while(p){
        cout << p->data << " ";
        p = p->next;
    }
    cout << endl;
}

结语

C++中的STL的stack和queue也是对栈和队列进行操作,那种方法更加简便
本篇文章到此结束,若有错误以及写的不明确的地方,还请在评论区指正或者联系我

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值