数据结构设计以执行所需的操作
设计一个可以做以下操作的数据结构
- 在 O(n) 中添加 ()
- O(1) 中的 getMinimum()
- O(1) 中的 deleteMinimum()
来源: MakeMyTrip 采访。
- 维护一个以递增顺序排列元素的链表。
- 在删除最小操作的情况下将头移动到下一个位置。
- 在获取最小操作的情况下返回第一个元素。
// 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 现场工作专业课程和学生竞争性编程现场课程。