📜  数据结构设计以执行所需的操作

📅  最后修改于: 2022-05-13 01:57:44.707000             🧑  作者: Mango

数据结构设计以执行所需的操作

设计一个可以做以下操作的数据结构

  1. 在 O(n) 中添加 ()
  2. O(1) 中的 getMinimum()
  3. O(1) 中的 deleteMinimum()

来源: MakeMyTrip 采访。

  1. 维护一个以递增顺序排列元素的链表。
  2. 在删除最小操作的情况下将头移动到下一个位置。
  3. 在获取最小操作的情况下返回第一个元素。
// Java code for linked list to
// perform required operations
import java.util.*;
  
// Node class
class Node
{
    int data;
    Node next;
  
    Node(int d)
    {
        data = d;
        next = null;
    }
}
  
// main class
class MinDS
{
    Node start;
  
    public MinDS()
    {
        start = null;
    }
  
    // Function to add element
    void addElement(int d)
    {
        Node tmp = new Node(d);
  
        // If linked list is empty
        if (start == null)
        {
            start = tmp;
            return;
        }
  
        // If head itself is greater
        if (d < start.data)
        {
            tmp.next = start;
            start = tmp;
            return;
        }
          
        // If need to insert somewhere in middle
        Node prev = start;
        Node ptr = start.next;
        while (ptr != null)
        {
            if (d < ptr.data)
            {
                tmp.next = ptr;
                prev.next = tmp;
                return;
            }
            else
            {
                prev = ptr;
                ptr = ptr.next;
            }
        }
        prev.next = tmp;
    }
  
    // Function to get minimum
    int getMin()
    {
        return start.data;
    }
  
    // Function to delete minimum
    int delMin()
    {
        int min = start.data;
        start = start.next;
        return min;
    }
  
    // Function to print elements
    void print()
    {
        Node ptr = start;
        System.out.print("Elements: ");
        while (ptr != null)
        {
            System.out.print(ptr.data + ", ");
            ptr = ptr.next;
        }
        System.out.println("\n");
    }
  
    // Driver code
    public static void main(String[] args)
    {
        MinDS x = new MinDS();
        x.addElement(10);
        x.addElement(20);
        x.addElement(5);
        x.addElement(15);
        x.print();
  
        System.out.println("Get Min: " + x.getMin());
        System.out.println("Del Min: " + x.delMin());
        x.print();
  
        System.out.println("Min: " + x.getMin());
    }
}
输出:
Elements: 5, 10, 15, 20, 

Get Min: 5
Del Min: 5
Elements: 10, 15, 20, 

Min: 10

如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程学生竞争性编程现场课程。