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

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

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

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

算法思路

算法思路:

在不使用 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 类。

相关文章
|
7月前
|
前端开发 Java
java前端:删除数组中指定元素的方法
java前端:删除数组中指定元素的方法
116 1
|
7月前
|
C++
移除元素(C++)
移除元素(C++)
38 0
数组筛选,将数组[2,0,6,1,77,0,52,0,25,7]中大于等于10元素选出来,放入新数组,声明一个新的数组用于存放新数据newArr,遍历原来的旧数组,找到大于10的元素,依次追加新数组
数组筛选,将数组[2,0,6,1,77,0,52,0,25,7]中大于等于10元素选出来,放入新数组,声明一个新的数组用于存放新数据newArr,遍历原来的旧数组,找到大于10的元素,依次追加新数组
|
6月前
|
索引
删除数组中的指定元素(了解如何删除数组中的指定元素,并返回一个新的数组,看这一篇就足够了!)
删除数组中的指定元素(了解如何删除数组中的指定元素,并返回一个新的数组,看这一篇就足够了!)
|
6月前
27.移除元素
27.移除元素
|
7月前
在排序数组中查找元素的第一个和最后一个位置
在排序数组中查找元素的第一个和最后一个位置
数组相关算法题——LeetCode.27《移除元素》
数组相关算法题——LeetCode.27《移除元素》
|
7月前
如何删除数组中的某个元素?
如何删除数组中的某个元素?
81 0
|
7月前
|
存储 索引 NoSQL
二叉堆与自定义优先队列实现删除任意元素
二叉堆与自定义优先队列实现删除任意元素
曲线救国 —— 删除数组的指定元素
曲线救国 —— 删除数组的指定元素
39 0