栈 与 队列(c++)

栈:

栈(stack),是一种操作受限制的线性的数据结构 其限制是只允许在栈的一端进行插入和删除运算 栈的修改按照后进先出的原则,栈被称做后进先出(last in first out)表,简称 LIFO 表 可以想象往子弹夹中装子弹的情形 正常情况下只能往子弹夹入口那段端入子弹,好比向栈中压入元素,称为 push 射击时,弹夹会从顶端弹出子弹,好比从栈顶弹出元素称为 pop

用数组实现栈:

int a[100005],pos;
void push(int val)
{
    a[++pos]=val;
}
int pop()
{
    if(pos<=0)
    {
        return -1;
    }
    return s[pos--];
}

 C++ 中使用STL构造一个stack的语句为:stack <T> s 更多用法可以翻阅文档: http://cplusplus.com/reference/stack/stack/?kw=stack(这是英文的)

栈的基本操作:

1.push(x)将x压入栈中(x成为栈顶元素)

2.pop()弹出栈顶元素(如果栈为空,则越界)

3.top()获取栈顶元素的值(如果栈为空,则越界)

4.empty()如果为1说明栈为空,否则说明栈非空

5.size()获取栈的长度(元素个数)

队列:

队列(queue),是一种操作受限制的线性的数据结构 其限制是只允许在队列的尾部进行插入,在前端进行删除 队列的修改具有为先进先出(first in first out)的性质表,简称 FIFO表

用数组实现队列:

int q[100005],h,t;
void push(int x)
{
    q[++t]=x;
}
void pop()
{
    if(t<h)
    {
        return;
    }
    ++h;
}
int front()
{
    if(t<h)
    {
        return 0x3f3f3f3f;
    }
    return q[h];
}

C++ 中使用STL构造一个queue的语句为: queue <T> q 更多用法可以翻阅文档: http://cplusplus.com/reference/ queue / queue /?kw= queue

这篇超级短的博客就到这里啦,下一篇我们会继续讲双端队列和优先队列

  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是队列C++实现: 的实现: ```cpp #include <iostream> using namespace std; const int MAXSIZE = 100; // 的最大容量 class Stack { private: int top; // 顶指针 int data[MAXSIZE]; // 的数据存储区 public: Stack() { top = -1; } // 构造函数,初始化顶指针为-1 bool push(int x); // 入操作 bool pop(); // 出操作 bool isEmpty(); // 判断是否为空 int getTop(); // 获取顶元素 }; bool Stack::push(int x) { if (top == MAXSIZE - 1) { // 满,无法入 return false; } data[++top] = x; // 顶指针加1,将元素x入 return true; } bool Stack::pop() { if (top == -1) { // 空,无法出 return false; } top--; // 顶指针减1,出 return true; } bool Stack::isEmpty() { return top == -1; } int Stack::getTop() { if (top == -1) { // 空,返回-1 return -1; } return data[top]; // 返回顶元素 } int main() { Stack s; s.push(1); s.push(2); s.push(3); while (!s.isEmpty()) { cout << s.getTop() << " "; s.pop(); } return 0; } ``` 队列的实现: ```cpp #include <iostream> using namespace std; const int MAXSIZE = 100; // 队列的最大容量 class Queue { private: int front, rear; // 队头和队尾指针 int data[MAXSIZE]; // 队列的数据存储区 public: Queue() { front = rear = 0; } // 构造函数,初始化队头和队尾指针为0 bool enqueue(int x); // 入队操作 bool dequeue(); // 出队操作 bool isEmpty(); // 判断队列是否为空 int getFront(); // 获取队头元素 }; bool Queue::enqueue(int x) { if ((rear + 1) % MAXSIZE == front) { // 队满,无法入队 return false; } data[rear] = x; // 将元素x入队 rear = (rear + 1) % MAXSIZE; // 队尾指针加1 return true; } bool Queue::dequeue() { if (front == rear) { // 队空,无法出队 return false; } front = (front + 1) % MAXSIZE; // 队头指针加1,出队 return true; } bool Queue::isEmpty() { return front == rear; } int Queue::getFront() { if (front == rear) { // 队空,返回-1 return -1; } return data[front]; // 返回队头元素 } int main() { Queue q; q.enqueue(1); q.enqueue(2); q.enqueue(3); while (!q.isEmpty()) { cout << q.getFront() << " "; q.dequeue(); } return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值