diff --git a/DIRECTORY.md b/DIRECTORY.md index d6df201e..01799f61 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -20,6 +20,7 @@ * [Doublylinkedlist](./DataStructures/DoublyLinkedList.php) * [Node](./DataStructures/Node.php) * [Singlylinkedlist](./DataStructures/SinglyLinkedList.php) + * [Stack](./DataStructures/Stack.php) ## Graphs * [Breadthfirstsearch](./Graphs/BreadthFirstSearch.php) @@ -102,6 +103,7 @@ * Datastructures * [Doublylinkedlisttest](./tests/DataStructures/DoublyLinkedListTest.php) * [Singlylinkedlisttest](./tests/DataStructures/SinglyLinkedListTest.php) + * [Stacktest](./tests/DataStructures/StackTest.php) * Graphs * [Breadthfirstsearchtest](./tests/Graphs/BreadthFirstSearchTest.php) * [Depthfirstsearchtest](./tests/Graphs/DepthFirstSearchTest.php) diff --git a/DataStructures/Stack.php b/DataStructures/Stack.php new file mode 100644 index 00000000..eaeb7c58 --- /dev/null +++ b/DataStructures/Stack.php @@ -0,0 +1,85 @@ +stack = $array; + } + + public function __destruct() + { + unset($this->stack); + } + + + public function push($data): void + { + array_push($this->stack, $data); + } + + public function pop() + { + return array_pop($this->stack); + } + + public function peek() + { + return $this->stack[count($this->stack) - 1]; + } + + public function isEmpty(): bool + { + return empty($this->stack); + } + + public function print(): void + { + echo implode(', ', $this->stack); + } + + public function __toString(): string + { + return implode(', ', $this->stack); + } + + public function length(): int + { + return count($this->stack); + } + + public function clear(): void + { + $this->stack = []; + } + + public function search($data): int + { + return array_search($data, $this->stack); + } + + public function toArray(): array + { + return $this->stack; + } + + public function fromArray(array $array): void + { + $this->stack = $array; + } + + public function reverse(): void + { + $this->stack = array_reverse($this->stack); + } + + public function sort(): void + { + sort($this->stack); + } +} diff --git a/tests/DataStructures/StackTest.php b/tests/DataStructures/StackTest.php new file mode 100644 index 00000000..7f1c44be --- /dev/null +++ b/tests/DataStructures/StackTest.php @@ -0,0 +1,110 @@ +assertEquals([1, 2, 3], $stack->toArray()); + } + + public function testDestruct() + { + $stack = new Stack([1, 2, 3]); + unset($stack); + $this->expectNotToPerformAssertions(); + } + + public function testPush() + { + $stack = new Stack(); + $stack->push(1); + $stack->push(2); + $stack->push(3); + $this->assertEquals([1, 2, 3], $stack->toArray()); + } + + public function testPop() + { + $stack = new Stack([1, 2, 3]); + $this->assertEquals(3, $stack->pop()); + $this->assertEquals([1, 2], $stack->toArray()); + } + + public function testPeek() + { + $stack = new Stack([1, 2, 3]); + $this->assertEquals(3, $stack->peek()); + } + + public function testIsEmpty() + { + $stack = new Stack(); + $this->assertTrue($stack->isEmpty()); + } + + public function testPrint() + { + $stack = new Stack([1, 2, 3]); + $this->expectOutputString("1, 2, 3"); + $stack->print(); + } + + public function testToString() + { + $stack = new Stack([1, 2, 3]); + $this->expectOutputString("1, 2, 3"); + echo $stack; + } + + public function testLength() + { + $stack = new Stack([1, 2, 3]); + $this->assertEquals(3, $stack->length()); + } + + public function testClear() + { + $stack = new Stack([1, 2, 3]); + $stack->clear(); + $this->assertEquals([], $stack->toArray()); + } + + public function testSearch() + { + $stack = new Stack([1, 2, 3]); + $this->assertEquals(2, $stack->search(3)); + } + + public function testToArray() + { + $stack = new Stack([1, 2, 3]); + $this->assertEquals([1, 2, 3], $stack->toArray()); + } + + public function testFromArray() + { + $stack = new Stack(); + $stack->fromArray([1, 2, 3]); + $this->assertEquals([1, 2, 3], $stack->toArray()); + } + + public function testReverse() + { + $stack = new Stack([1, 2, 3]); + $stack->reverse(); + $this->assertEquals([3, 2, 1], $stack->toArray()); + } + + public function testSort() + { + $stack = new Stack([3, 2, 1]); + $stack->sort(); + $this->assertEquals([1, 2, 3], $stack->toArray()); + } +}