using
System;
class
GFG
{
public
class
DQueNode {
public
int
value;
public
DQueNode next;
public
DQueNode prev;
}
public
class
deque {
private
DQueNode head;
private
DQueNode tail;
public
deque() { head = tail =
null
; }
public
bool
isEmpty()
{
if
(head ==
null
)
return
true
;
return
false
;
}
public
int
size()
{
if
(!isEmpty()) {
DQueNode temp = head;
int
len = 0;
while
(temp !=
null
) {
len++;
temp = temp.next;
}
return
len;
}
return
0;
}
public
void
insert_first(
int
element)
{
DQueNode temp =
new
DQueNode();
temp.value = element;
if
(head ==
null
) {
head = tail = temp;
temp.next = temp.prev =
null
;
}
else
{
head.prev = temp;
temp.next = head;
temp.prev =
null
;
head = temp;
}
}
public
void
insert_last(
int
element)
{
DQueNode temp =
new
DQueNode();
temp.value = element;
if
(head ==
null
) {
head = tail = temp;
temp.next = temp.prev =
null
;
}
else
{
tail.next = temp;
temp.next =
null
;
temp.prev = tail;
tail = temp;
}
}
public
void
remove_first()
{
if
(!isEmpty()) {
head = head.next;
head.prev =
null
;
return
;
}
Console.Write(
"List is Empty"
);
}
public
void
remove_last()
{
if
(!isEmpty()) {
tail = tail.prev;
tail.next =
null
;
return
;
}
Console.Write(
"List is Empty"
);
}
public
void
display()
{
if
(!isEmpty()) {
DQueNode temp = head;
while
(temp !=
null
) {
Console.Write(temp.value +
" "
);
temp = temp.next;
}
return
;
}
Console.Write(
"List is Empty"
);
}
}
public
class
Stack {
deque d =
new
deque();
public
void
push(
int
element)
{
d.insert_last(element);
}
public
int
size() {
return
d.size(); }
public
void
pop() { d.remove_last(); }
public
void
display() { d.display(); }
}
class
Queue {
deque d =
new
deque();
public
void
enqueue(
int
element)
{
d.insert_last(element);
}
public
void
dequeue() { d.remove_first(); }
public
void
display() { d.display(); }
public
int
size() {
return
d.size(); }
}
public
static
void
Main(String[] args)
{
Stack stk =
new
Stack();
stk.push(7);
stk.push(8);
Console.Write(
"Stack: "
);
stk.display();
Console.WriteLine();
stk.pop();
Console.Write(
"Stack: "
);
stk.display();
Console.WriteLine();
Queue que =
new
Queue();
que.enqueue(12);
que.enqueue(13);
Console.Write(
"Queue: "
);
que.display();
Console.WriteLine();
que.dequeue();
Console.Write(
"Queue: "
);
que.display();
Console.WriteLine();
Console.WriteLine(
"Size of stack is "
+ stk.size());
Console.WriteLine(
"Size of queue is "
+ que.size());
}
}