Skip to content

Commit 9e8e95a

Browse files
Adding the Stack Data Structure (#137)
* Adding the Stack Data Structure * Fixing the Lint Issue
1 parent a9e823d commit 9e8e95a

File tree

3 files changed

+197
-0
lines changed

3 files changed

+197
-0
lines changed

DIRECTORY.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
* [Doublylinkedlist](./DataStructures/DoublyLinkedList.php)
2121
* [Node](./DataStructures/Node.php)
2222
* [Singlylinkedlist](./DataStructures/SinglyLinkedList.php)
23+
* [Stack](./DataStructures/Stack.php)
2324

2425
## Graphs
2526
* [Breadthfirstsearch](./Graphs/BreadthFirstSearch.php)
@@ -103,6 +104,7 @@
103104
* Datastructures
104105
* [Doublylinkedlisttest](./tests/DataStructures/DoublyLinkedListTest.php)
105106
* [Singlylinkedlisttest](./tests/DataStructures/SinglyLinkedListTest.php)
107+
* [Stacktest](./tests/DataStructures/StackTest.php)
106108
* Graphs
107109
* [Breadthfirstsearchtest](./tests/Graphs/BreadthFirstSearchTest.php)
108110
* [Depthfirstsearchtest](./tests/Graphs/DepthFirstSearchTest.php)

DataStructures/Stack.php

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
<?php
2+
3+
/**
4+
* Stack Implementation in PHP
5+
*/
6+
class Stack
7+
{
8+
private array $stack = [];
9+
10+
public function __construct(array $array = [])
11+
{
12+
$this->stack = $array;
13+
}
14+
15+
public function __destruct()
16+
{
17+
unset($this->stack);
18+
}
19+
20+
21+
public function push($data): void
22+
{
23+
array_push($this->stack, $data);
24+
}
25+
26+
public function pop()
27+
{
28+
return array_pop($this->stack);
29+
}
30+
31+
public function peek()
32+
{
33+
return $this->stack[count($this->stack) - 1];
34+
}
35+
36+
public function isEmpty(): bool
37+
{
38+
return empty($this->stack);
39+
}
40+
41+
public function print(): void
42+
{
43+
echo implode(', ', $this->stack);
44+
}
45+
46+
public function __toString(): string
47+
{
48+
return implode(', ', $this->stack);
49+
}
50+
51+
public function length(): int
52+
{
53+
return count($this->stack);
54+
}
55+
56+
public function clear(): void
57+
{
58+
$this->stack = [];
59+
}
60+
61+
public function search($data): int
62+
{
63+
return array_search($data, $this->stack);
64+
}
65+
66+
public function toArray(): array
67+
{
68+
return $this->stack;
69+
}
70+
71+
public function fromArray(array $array): void
72+
{
73+
$this->stack = $array;
74+
}
75+
76+
public function reverse(): void
77+
{
78+
$this->stack = array_reverse($this->stack);
79+
}
80+
81+
public function sort(): void
82+
{
83+
sort($this->stack);
84+
}
85+
}

tests/DataStructures/StackTest.php

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
<?php
2+
3+
use PHPUnit\Framework\TestCase;
4+
5+
require_once __DIR__ . '/../../vendor/autoload.php';
6+
require_once __DIR__ . '/../../DataStructures/Stack.php';
7+
8+
class StackTest extends TestCase
9+
{
10+
public function testConstruct()
11+
{
12+
$stack = new Stack([1, 2, 3]);
13+
$this->assertEquals([1, 2, 3], $stack->toArray());
14+
}
15+
16+
public function testDestruct()
17+
{
18+
$stack = new Stack([1, 2, 3]);
19+
unset($stack);
20+
$this->expectNotToPerformAssertions();
21+
}
22+
23+
public function testPush()
24+
{
25+
$stack = new Stack();
26+
$stack->push(1);
27+
$stack->push(2);
28+
$stack->push(3);
29+
$this->assertEquals([1, 2, 3], $stack->toArray());
30+
}
31+
32+
public function testPop()
33+
{
34+
$stack = new Stack([1, 2, 3]);
35+
$this->assertEquals(3, $stack->pop());
36+
$this->assertEquals([1, 2], $stack->toArray());
37+
}
38+
39+
public function testPeek()
40+
{
41+
$stack = new Stack([1, 2, 3]);
42+
$this->assertEquals(3, $stack->peek());
43+
}
44+
45+
public function testIsEmpty()
46+
{
47+
$stack = new Stack();
48+
$this->assertTrue($stack->isEmpty());
49+
}
50+
51+
public function testPrint()
52+
{
53+
$stack = new Stack([1, 2, 3]);
54+
$this->expectOutputString("1, 2, 3");
55+
$stack->print();
56+
}
57+
58+
public function testToString()
59+
{
60+
$stack = new Stack([1, 2, 3]);
61+
$this->expectOutputString("1, 2, 3");
62+
echo $stack;
63+
}
64+
65+
public function testLength()
66+
{
67+
$stack = new Stack([1, 2, 3]);
68+
$this->assertEquals(3, $stack->length());
69+
}
70+
71+
public function testClear()
72+
{
73+
$stack = new Stack([1, 2, 3]);
74+
$stack->clear();
75+
$this->assertEquals([], $stack->toArray());
76+
}
77+
78+
public function testSearch()
79+
{
80+
$stack = new Stack([1, 2, 3]);
81+
$this->assertEquals(2, $stack->search(3));
82+
}
83+
84+
public function testToArray()
85+
{
86+
$stack = new Stack([1, 2, 3]);
87+
$this->assertEquals([1, 2, 3], $stack->toArray());
88+
}
89+
90+
public function testFromArray()
91+
{
92+
$stack = new Stack();
93+
$stack->fromArray([1, 2, 3]);
94+
$this->assertEquals([1, 2, 3], $stack->toArray());
95+
}
96+
97+
public function testReverse()
98+
{
99+
$stack = new Stack([1, 2, 3]);
100+
$stack->reverse();
101+
$this->assertEquals([3, 2, 1], $stack->toArray());
102+
}
103+
104+
public function testSort()
105+
{
106+
$stack = new Stack([3, 2, 1]);
107+
$stack->sort();
108+
$this->assertEquals([1, 2, 3], $stack->toArray());
109+
}
110+
}

0 commit comments

Comments
 (0)