请实现一个队列,支持以下操作:添加元素、删除第一个元素、获取第一个元素。

简介: 请实现一个队列,支持以下操作:添加元素、删除第一个元素、获取第一个元素。

请实现一个队列,支持以下操作:添加元素、删除第一个元素、获取第一个元素。

简介:请实现一个队列,支持以下操作:添加元素、删除第一个元素、获取第一个元素。

算法思路

算法思路:

在不使用 STL 库的情况下,我们可以通过手动维护队列底层数据结构的方式来实现队列。具体而言,我们可以采用链表这样一种数据结构来表示队列。

首先,我们需要定义一个 node 结构体,表示链表节点的数据结构:

struct Node {
    int val;
    Node* next;
    Node(int x) : val(x), next(NULL) {}
};

接着,我们定义 Queue 类来表示队列本身。在 Queue 类中,我们需要定义变量 head 和 tail 分别指向队列的头和尾,以及一个成员函数 push 用于添加元素,另外定义 pop 和 front 分别用于删除第一个元素和获取第一个元素:

class Queue {
public:
    Node *head, *tail;
    Queue() {
        head = tail = NULL;
    }
    void push(int x) { // 添加元素
        if (!head) {
            head = tail = new Node(x);
        } else {
            tail->next = new Node(x);
            tail = tail->next;
        }
    }
    void pop() { // 删除第一个元素
        if (head) {
            Node* tmp = head;
            head = head->next;
            delete tmp;
        } else {
            return;
        }
    }
    int front() { // 获取第一个元素
        if (head) {
            return head->val;
        } else {
            return -1;
        }
    }
};

最后,我们在主函数中创建一个 Queue 对象,调用其函数来执行相应操作即可:

#include <iostream>
using namespace std;
struct Node {
    int val;
    Node* next;
    Node(int x) : val(x), next(NULL) {}
};
class Queue {
public:
    Node *head, *tail;
    Queue() {
        head = tail = NULL;
    }
    void push(int x) { // 添加元素
        if (!head) {
            head = tail = new Node(x);
        } else {
            tail->next = new Node(x);
            tail = tail->next;
        }
    }
    void pop() { // 删除第一个元素
        if (head) {
            Node* tmp = head;
            head = head->next;
            delete tmp;
        } else {
            return;
        }
    }
    int front() { // 获取第一个元素
        if (head) {
            return head->val;
        } else {
            return -1;
        }
    }
};
int main() {
    Queue q; // 创建一个队列
    // 添加元素
    q.push(1);
    q.push(2);
    q.push(3);
    // 获取第一个元素
    cout << "First element: " << q.front() << endl;
    // 删除第一个元素
    q.pop();
    // 获取删除后的第一个元素
    cout << "After pop, first element: " << q.front() << endl;
    return 0;
}

在上述代码实现中,我们定义了一个 Queue 变量来表示整个队列。通过手动维护链表的添加、删除和获取等操作,实现队列的基本功能。

  • Java版本
class Node {
    int val;
    Node next;
    Node(int x) {
        val = x;
        next = null;
    }
}
class Queue {
    private Node head; // 头节点
    private Node tail; // 尾节点
    public Queue() { // 构造函数
        head = tail = null;
    }
    public void push(int x) { // 添加元素
        if (head == null) {
            head = tail = new Node(x);
        } else {
            tail.next = new Node(x);
            tail = tail.next;
        }
    }
    public void pop() { // 删除第一个元素
        if (head != null) {
            Node tmp = head;
            head = head.next;
            tmp.next = null;
        }
    }
    public int front() { // 获取第一个元素
        if (head != null) {
            return head.val;
        } else {
            return -1;
        }
    }
}
public class Main {
    public static void main(String[] args) {
        Queue q = new Queue(); // 创建一个队列
        // 添加元素
        q.push(1);
        q.push(2);
        q.push(3);
        // 获取第一个元素
        System.out.println("First element: " + q.front());
        // 删除第一个元素
        q.pop();
        // 获取删除后的第一个元素
        System.out.println("After pop, first element: " + q.front());
    }
}

在上述代码实现中,我们定义了一个 Queue 变量来表示整个队列。通过手动维护链表的添加、删除和获取等操作,实现队列的基本功能。需要注意的是,在 Java 中采用 Node 类来表示链表节点,因此这里使用了一个 Node 类。

相关文章
|
2月前
|
前端开发 Java
java前端:删除数组中指定元素的方法
java前端:删除数组中指定元素的方法
|
2月前
|
C++
移除元素(C++)
移除元素(C++)
23 0
|
9天前
|
索引
删除数组中的指定元素(了解如何删除数组中的指定元素,并返回一个新的数组,看这一篇就足够了!)
删除数组中的指定元素(了解如何删除数组中的指定元素,并返回一个新的数组,看这一篇就足够了!)
|
16天前
27.移除元素
27.移除元素
|
2月前
|
索引
将数组指定索引位置的元素 移动到 目标索引位置,且不改变其他元素原本的顺序,注意这个不是对调元素位置,是移动某一个元素位置不影响其他元素顺(使用场景:拖拽改变数据的顺序,点击上下左右箭头移动元素顺序)
将数组指定索引位置的元素 移动到 目标索引位置,且不改变其他元素原本的顺序,注意这个不是对调元素位置,是移动某一个元素位置不影响其他元素顺(使用场景:拖拽改变数据的顺序,点击上下左右箭头移动元素顺序)
|
2月前
在排序数组中查找元素的第一个和最后一个位置
在排序数组中查找元素的第一个和最后一个位置
|
2月前
如何删除数组中的某个元素?
如何删除数组中的某个元素?
26 0
|
2月前
判断两个不重复的list集合是否相等 只比较元素值 不比较顺序
判断两个不重复的list集合是否相等 只比较元素值 不比较顺序
40 0
|
9月前
曲线救国 —— 删除数组的指定元素
曲线救国 —— 删除数组的指定元素
24 0
找出数组中单独的元素
此类题目需要非常熟悉位操作及位运算,同时要画图思考,才能将思路整理得很清楚。 或许有很多读者对我提出疑问,他们会认为这只是针对我举例的数组,才会有这种结果。而我想说:你们可以有时间尝试换一换数组中的元素,并且打乱顺序,也是可以做到的。本篇博客的目的主要是阐明逻辑,因为思路很重要!
110 0
找出数组中单独的元素