Skip to content

Commit aa4a09a

Browse files
committed
Completed Items
- Linked List - Doubly Linked List - Circular Linked List - Stack using Array - Stack using Linked List Todo: Inline comments and descriptions
1 parent 6a8a907 commit aa4a09a

File tree

14 files changed

+712
-0
lines changed

14 files changed

+712
-0
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
/nbproject/private/

Autoload.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?php
2+
3+
/*
4+
* To change this license header, choose License Headers in Project Properties.
5+
* To change this template file, choose Tools | Templates
6+
* and open the template in the editor.
7+
*/
8+
9+
spl_autoload_register(function($className) {
10+
$nameSpace = str_replace("\\","/",__NAMESPACE__);
11+
$className = str_replace("\\","/",$className);
12+
$classPath = __DIR__."/".(empty($nameSpace)?"":$nameSpace."/")."{$className}.php";
13+
require_once($classPath);
14+
});
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
<?php
2+
3+
/*
4+
* To change this license header, choose License Headers in Project Properties.
5+
* To change this template file, choose Tools | Templates
6+
* and open the template in the editor.
7+
*/
8+
9+
namespace DS\LinkedList\Classes;
10+
use \DS\LinkedList\Classes\{ListNode, LinkedList};
11+
12+
class CircularLinkedList extends LinkedList{
13+
14+
private $_firstNode = NULL;
15+
private $_totalNode = 0;
16+
17+
public function insertAtEnd(string $data = NULL) {
18+
$newNode = new ListNode($data);
19+
if ($this->_firstNode === NULL) {
20+
$this->_firstNode = &$newNode;
21+
} else {
22+
$currentNode = $this->_firstNode;
23+
while ($currentNode->next !== $this->_firstNode) {
24+
$currentNode = $currentNode->next;
25+
}
26+
$currentNode->next = $newNode;
27+
}
28+
$newNode->next = $this->_firstNode;
29+
$this->_totalNode++;
30+
return TRUE;
31+
}
32+
33+
public function display() {
34+
echo "Total Node: " . $this->_totalNode . "\n";
35+
$currentNode = $this->_firstNode;
36+
while ($currentNode->next !== $this->_firstNode) {
37+
echo $currentNode->data . "\n";
38+
$currentNode = $currentNode->next;
39+
}
40+
41+
if ($currentNode) {
42+
echo $currentNode->data . "\n";
43+
}
44+
}
45+
46+
}
Lines changed: 170 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,170 @@
1+
<?php
2+
3+
/*
4+
* To change this license header, choose License Headers in Project Properties.
5+
* To change this template file, choose Tools | Templates
6+
* and open the template in the editor.
7+
*/
8+
namespace DS\LinkedList\Classes;
9+
use \DS\LinkedList\Classes\ListNode;
10+
11+
class DoublyLinkedList {
12+
13+
private $_firstNode = NULL;
14+
private $_lastNode = NULL;
15+
private $_totalNode = 0;
16+
17+
public function insertAtFirst(string $data = NULL) {
18+
$newNode = new ListNode($data);
19+
if ($this->_firstNode === NULL) {
20+
$this->_firstNode = &$newNode;
21+
$this->_lastNode = $newNode;
22+
} else {
23+
$currentFirstNode = $this->_firstNode;
24+
$this->_firstNode = &$newNode;
25+
$newNode->next = $currentFirstNode;
26+
$currentFirstNode->prev = $newNode;
27+
}
28+
$this->_totalNode++;
29+
return TRUE;
30+
}
31+
32+
public function insertAtLast(string $data = NULL) {
33+
$newNode = new ListNode($data);
34+
if ($this->_firstNode === NULL) {
35+
$this->_firstNode = &$newNode;
36+
$this->_lastNode = $newNode;
37+
} else {
38+
$currentNode = $this->_lastNode;
39+
$currentNode->next = $newNode;
40+
$newNode->prev = $currentNode;
41+
$this->_lastNode = $newNode;
42+
}
43+
$this->_totalNode++;
44+
return TRUE;
45+
}
46+
47+
public function insertBefore(string $data = NULL, string $query = NULL) {
48+
$newNode = new ListNode($data);
49+
50+
if ($this->_firstNode) {
51+
$previous = NULL;
52+
$currentNode = $this->_firstNode;
53+
while ($currentNode !== NULL) {
54+
if ($currentNode->data === $query) {
55+
$newNode->next = $currentNode;
56+
$currentNode->prev = $newNode;
57+
$previous->next = $newNode;
58+
$newNode->prev = $previous;
59+
$this->_totalNode++;
60+
break;
61+
}
62+
$previous = $currentNode;
63+
$currentNode = $currentNode->next;
64+
}
65+
}
66+
}
67+
68+
public function insertAfter(string $data = NULL, string $query = NULL) {
69+
$newNode = new ListNode($data);
70+
71+
if ($this->_firstNode) {
72+
$nextNode = NULL;
73+
$currentNode = $this->_firstNode;
74+
while ($currentNode !== NULL) {
75+
if ($currentNode->data === $query) {
76+
if ($nextNode !== NULL) {
77+
$newNode->next = $nextNode;
78+
}
79+
if ($currentNode === $this->_lastNode) {
80+
$this->_lastNode = $newNode;
81+
}
82+
$currentNode->next = $newNode;
83+
$nextNode->prev = $newNode;
84+
$newNode->prev = $currentNode;
85+
$this->_totalNode++;
86+
break;
87+
}
88+
$currentNode = $currentNode->next;
89+
$nextNode = $currentNode->next;
90+
}
91+
}
92+
}
93+
94+
public function deleteFirst() {
95+
if ($this->_firstNode !== NULL) {
96+
if ($this->_firstNode->next !== NULL) {
97+
$this->_firstNode = $this->_firstNode->next;
98+
$this->_firstNode->prev = NULL;
99+
} else {
100+
$this->_firstNode = NULL;
101+
}
102+
$this->_totalNode--;
103+
return TRUE;
104+
}
105+
return FALSE;
106+
}
107+
108+
public function deleteLast() {
109+
if ($this->_lastNode !== NULL) {
110+
111+
$currentNode = $this->_lastNode;
112+
if ($currentNode->prev === NULL) {
113+
$this->_firstNode = NULL;
114+
$this->_lastNode = NULL;
115+
} else {
116+
$previousNode = $currentNode->prev;
117+
$this->_lastNode = $previousNode;
118+
$previousNode->next = NULL;
119+
$this->_totalNode--;
120+
return TRUE;
121+
}
122+
}
123+
return FALSE;
124+
}
125+
126+
public function delete(string $query = NULL) {
127+
if ($this->_firstNode) {
128+
$previous = NULL;
129+
$currentNode = $this->_firstNode;
130+
while ($currentNode !== NULL) {
131+
if ($currentNode->data === $query) {
132+
if ($currentNode->next === NULL) {
133+
$previous->next = NULL;
134+
} else {
135+
$previous->next = $currentNode->next;
136+
$currentNode->next->prev = $previous;
137+
}
138+
139+
$this->_totalNode--;
140+
break;
141+
}
142+
$previous = $currentNode;
143+
$currentNode = $currentNode->next;
144+
}
145+
}
146+
}
147+
148+
public function displayForward() {
149+
echo "Total book titles: " . $this->_totalNode . "\n";
150+
$currentNode = $this->_firstNode;
151+
while ($currentNode !== NULL) {
152+
echo $currentNode->data . "\n";
153+
$currentNode = $currentNode->next;
154+
}
155+
}
156+
157+
public function displayBackward() {
158+
echo "Total book titles: " . $this->_totalNode . "\n";
159+
$currentNode = $this->_lastNode;
160+
while ($currentNode !== NULL) {
161+
echo $currentNode->data . "\n";
162+
$currentNode = $currentNode->prev;
163+
}
164+
}
165+
166+
public function getSize() {
167+
return $this->_totalNode;
168+
}
169+
170+
}

0 commit comments

Comments
 (0)