Skip to content

Commit edef27e

Browse files
committed
Create TelephoneDirectory
1 parent 21df9ca commit edef27e

File tree

1 file changed

+120
-0
lines changed

1 file changed

+120
-0
lines changed

TelephoneDirectory

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
/*
2+
3+
Problem
4+
5+
6+
You will have to design a telephone directory where the following operations would be supported.
7+
1. GET: It will provide a number which is not assigned to anyone
8+
2. CHECK: Given a number it will tell whether it is assigned to anyone or not
9+
3. RELEASE: It will recycle or release a number
10+
11+
*/
12+
13+
public class TelephoneDirectory
14+
{
15+
public static void main(String[] args)
16+
{
17+
Directory directory = new Directory(5);
18+
int number1 = directory.getAvailableNumber();
19+
System.out.println(number1);
20+
int number2 = directory.getAvailableNumber();
21+
System.out.println(number2);
22+
System.out.println(directory.isAvailable(3));
23+
int number3 = directory.getAvailableNumber();
24+
System.out.println(number3);
25+
System.out.println(directory.isAvailable(3));
26+
int number4 = directory.getAvailableNumber();
27+
System.out.println(directory.isAvailable(3));
28+
System.out.println(number4);
29+
int number5 = directory.getAvailableNumber();
30+
System.out.println(number5);
31+
int number6 = directory.getAvailableNumber();
32+
System.out.println(number6);
33+
int number7 = directory.getAvailableNumber();
34+
System.out.println(number7);
35+
directory.release(3);
36+
System.out.println(directory.isAvailable(3));
37+
int number8 = directory.getAvailableNumber();
38+
System.out.println(number8);
39+
System.out.println(directory.isAvailable(3));
40+
}
41+
42+
private static class Directory
43+
{
44+
Node[] nodes;
45+
Node head;
46+
47+
public Directory(int maxNumbers)
48+
{
49+
nodes = new Node[maxNumbers];
50+
for (int i = 0; i < maxNumbers; ++i)
51+
{
52+
nodes[i] = new Node(i);
53+
if (i != 0)
54+
{
55+
nodes[i].previous = nodes[i - 1];
56+
nodes[i - 1].next = nodes[i];
57+
}
58+
}
59+
nodes[maxNumbers - 1].next = nodes[0];
60+
nodes[0].previous = nodes[maxNumbers - 1];
61+
head = nodes[0];
62+
}
63+
64+
public int getAvailableNumber()
65+
{
66+
if (head == null)
67+
return -1;
68+
int temp = head.number;
69+
head.available = false;
70+
if (head.next == head)
71+
head = null;
72+
else
73+
{
74+
head.previous.next = head.next;
75+
head.next.previous = head.previous;
76+
head = head.next;
77+
}
78+
return temp;
79+
}
80+
81+
public boolean isAvailable(int number)
82+
{
83+
return nodes[number].available;
84+
}
85+
86+
public void release(int number)
87+
{
88+
if (nodes[number].available == false)
89+
{
90+
nodes[number].available = true;
91+
if (head == null)
92+
{
93+
head = nodes[number];
94+
nodes[number].next = nodes[number];
95+
nodes[number].previous = nodes[number];
96+
} else
97+
{
98+
nodes[number].next = head.next;
99+
nodes[number].previous = head;
100+
head.next.previous = nodes[number];
101+
head.next = nodes[number];
102+
}
103+
}
104+
}
105+
106+
private static class Node
107+
{
108+
boolean available = true;
109+
Node next;
110+
Node previous;
111+
int number;
112+
113+
public Node(int number)
114+
{
115+
this.number = number;
116+
}
117+
}
118+
}
119+
120+
}

0 commit comments

Comments
 (0)