-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathdeque.js
116 lines (113 loc) · 2.51 KB
/
deque.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
//implementing deque queue;
// a deque is double ended queue;
class Deque {
constructor(size) {
this.size = size - 1;
this.front = -1;
this.rear = -1;
this.queue = [];
}
isFull() {
if (this.front === this.rear + 1 || (this.front === 0 && this.rear === this.size)) {
console.log('the queue is full')
return true;
}
return false;
}
isEmpty() {
if (this.front === -1) {
console.log('the queue is empty');
return true;
}
return false;
}
frontInsert(item) {
if (isNaN(item)) {
throw new Error('the argument must be a number');
}
if (this.isFull()) {
return;
}
if (this.front === 0) {
this.front = this.size;
this.queue[this.front] = item;
} else {
if (this.front === -1) {
this.front = 0;
this.rear = 0;
this.queue[this.front] = item;
} else {
this.front--;
this.queue[this.front] = item;
}
}
console.log(this.queue);
}
rearInsert(item) {
if (isNaN(item)) {
throw new Error('argument must be a number');
}
if (this.isFull()) {
return;
}
if (this.rear === this.size) {
this.rear = 0;
this.queue[this.rear] = item;
} else {
this.rear++;
this.queue[this.rear] = item;
if (this.front === -1) { this.front = 0 };
}
console.log(this.queue);
}
frontRemove() {
if (this.isEmpty()) {
return;
}
if (this.front === this.rear) {
this.queue[this.front] = null;
[this.front, this.rear] = [-1, -1];
} else {
if (this.front === this.size) {
this.queue[this.front] = null;
this.front = 0;
} else {
this.queue[this.front] = null;
this.front++;
}
}
console.log(this.queue);
}
rearRemove() {
if (this.isEmpty()) {
return;
}
if (this.rear === this.front) {
this.queue[this.front] = null;
[this.front, this.rear] = [-1, -1];
} else {
if (this.rear === 0) {
this.queue[this.rear] = null
this.rear = this.size;
} else {
this.queue[this.rear] = null;
this.rear--;
}
}
console.log(this.queue);
// if this.rear == 0 index
// the operation
//if this.rear == front;
// operation
// else
}
}
const deque_queue = new Deque(6);
deque_queue.frontInsert("ITEM");
deque_queue.rearInsert("ITEM");
deque_queue.frontRemove();
deque_queue.rearRemove();
deque_queue.rear;
deque_queue.queue;
deque_queue.front;
deque_queue.size;