Skip to content

Commit 5cd48fe

Browse files
refactor: rename interfaces with I prefix and remove Impl suffix
- Stack → IStack, SinglyLinkedList → ISinglyLinkedList, DoublyLinkedList → IDoublyLinkedList - SinglyLinkedListImpl → SinglyLinkedList, DoublyLinkedListImpl → DoublyLinkedList - Fix stack test imports (stacks → stack) - Update README accordingly
1 parent 5ddfab1 commit 5cd48fe

9 files changed

Lines changed: 29 additions & 29 deletions

File tree

README.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -33,20 +33,20 @@ ms.get_min() # 3
3333

3434
| Implementation | Description |
3535
|---|---|
36-
| `SinglyLinkedListImpl` | Singly linked list with O(1) push/pop at the head. |
37-
| `DoublyLinkedListImpl` | Doubly linked list with O(1) push/pop at both head and tail. |
36+
| `SinglyLinkedList` | Singly linked list with O(1) push/pop at the head. |
37+
| `DoublyLinkedList` | Doubly linked list with O(1) push/pop at both head and tail. |
3838

3939
```python
40-
from data_structures.linked_list import SinglyLinkedListImpl, DoublyLinkedListImpl
40+
from data_structures.linked_list import SinglyLinkedList, DoublyLinkedList
4141

42-
sll = SinglyLinkedListImpl()
42+
sll = SinglyLinkedList()
4343
sll.push_front(1)
4444
sll.push_front(2)
4545
sll.peek_front() # 2
4646
sll.pop_front() # 2
4747
list(sll) # [1]
4848

49-
dll = DoublyLinkedListImpl()
49+
dll = DoublyLinkedList()
5050
dll.push_front(1)
5151
dll.push_back(2)
5252
dll.push_back(3)
@@ -80,8 +80,8 @@ data_structures/
8080
min_stack.py # MinStack implementation
8181
linked_list/
8282
base.py # SinglyLinkedList & DoublyLinkedList ABCs
83-
singly_linked_list.py # SinglyLinkedListImpl
84-
doubly_linked_list.py # DoublyLinkedListImpl
83+
singly_linked_list.py # SinglyLinkedList
84+
doubly_linked_list.py # DoublyLinkedList
8585
tests/
8686
test_stacks.py # pytest suite for stack implementations
8787
test_linked_lists.py # pytest suite for linked list implementations
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
from .base import DoublyLinkedList, LinkedListEmptyError, SinglyLinkedList
2-
from .doubly_linked_list import DoublyLinkedListImpl
3-
from .singly_linked_list import SinglyLinkedListImpl
1+
from .base import IDoublyLinkedList, ISinglyLinkedList, LinkedListEmptyError
2+
from .doubly_linked_list import DoublyLinkedList
3+
from .singly_linked_list import SinglyLinkedList
44

55
__all__ = [
6+
"IDoublyLinkedList",
67
"DoublyLinkedList",
7-
"DoublyLinkedListImpl",
8+
"ISinglyLinkedList",
89
"LinkedListEmptyError",
910
"SinglyLinkedList",
10-
"SinglyLinkedListImpl",
1111
]

data_structures/linked_list/base.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ def __init__(self) -> None:
99
super().__init__("Linked list is empty")
1010

1111

12-
class SinglyLinkedList[T](ABC):
12+
class ISinglyLinkedList[T](ABC):
1313
"""Abstract Singly Linked List interface.
1414
1515
Each node holds a reference only to the *next* node.
@@ -40,11 +40,11 @@ def __iter__(self) -> Iterator[T]:
4040
"""Iterate over all elements from head to tail."""
4141

4242

43-
class DoublyLinkedList[T](SinglyLinkedList[T]):
43+
class IDoublyLinkedList[T](ISinglyLinkedList[T]):
4444
"""Abstract Doubly Linked List interface.
4545
4646
Each node holds references to both *next* and *prev* nodes.
47-
Adds O(1) tail operations on top of ``SinglyLinkedList``.
47+
Adds O(1) tail operations on top of ``ISinglyLinkedList``.
4848
"""
4949

5050
@abstractmethod

data_structures/linked_list/doubly_linked_list.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from typing import Iterator
22

3-
from .base import DoublyLinkedList, LinkedListEmptyError
3+
from .base import IDoublyLinkedList, LinkedListEmptyError
44

55

66
class _Node[T]:
@@ -17,7 +17,7 @@ def __init__(
1717
self.next = next
1818

1919

20-
class DoublyLinkedListImpl[T](DoublyLinkedList[T]):
20+
class DoublyLinkedList[T](IDoublyLinkedList[T]):
2121
"""Doubly linked list backed by ``_Node`` objects."""
2222

2323
def __init__(self) -> None:

data_structures/linked_list/singly_linked_list.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from typing import Iterator
22

3-
from .base import LinkedListEmptyError, SinglyLinkedList
3+
from .base import ISinglyLinkedList, LinkedListEmptyError
44

55

66
class _Node[T]:
@@ -11,7 +11,7 @@ def __init__(self, value: T, next: "_Node[T] | None" = None) -> None:
1111
self.next = next
1212

1313

14-
class SinglyLinkedListImpl[T](SinglyLinkedList[T]):
14+
class SinglyLinkedList[T](ISinglyLinkedList[T]):
1515
"""Singly linked list backed by ``_Node`` objects."""
1616

1717
def __init__(self) -> None:

data_structures/stack/array_stack.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
from .base import Stack, StackEmptyError
1+
from .base import IStack, StackEmptyError
22

33

4-
class ArrayStack[T](Stack):
4+
class ArrayStack[T](IStack):
55
"""Stack backed by a dynamic array (``list``)."""
66

77
def __init__(self) -> None:

data_structures/stack/base.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ def __init__(self) -> None:
88
super().__init__("Stack is empty")
99

1010

11-
class Stack[T](ABC):
11+
class IStack[T](ABC):
1212
"""Abstract Stack interface (LIFO - Last In First Out).
1313
1414
>>> s = ArrayStack()

tests/test_linked_lists.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
import pytest
22

33
from data_structures.linked_list import (
4-
DoublyLinkedListImpl,
4+
DoublyLinkedList,
55
LinkedListEmptyError,
6-
SinglyLinkedListImpl,
6+
SinglyLinkedList,
77
)
88

99

1010
# ── Shared tests (both singly and doubly) ────────────────────────────
1111

1212

13-
@pytest.fixture(params=[SinglyLinkedListImpl, DoublyLinkedListImpl])
13+
@pytest.fixture(params=[SinglyLinkedList, DoublyLinkedList])
1414
def ll(request):
1515
return request.param()
1616

@@ -87,7 +87,7 @@ def test_push_pop_until_empty(ll):
8787

8888
@pytest.fixture
8989
def dll():
90-
return DoublyLinkedListImpl()
90+
return DoublyLinkedList()
9191

9292

9393
def test_push_back_and_peek_back(dll):

tests/test_stacks.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import pytest
22

3-
from data_structures.stacks.array_stack import ArrayStack
4-
from data_structures.stacks.base import StackEmptyError
5-
from data_structures.stacks.min_stack import MinStack
3+
from data_structures.stack.array_stack import ArrayStack
4+
from data_structures.stack.base import StackEmptyError
5+
from data_structures.stack.min_stack import MinStack
66

77

88
@pytest.fixture(params=[ArrayStack, MinStack])

0 commit comments

Comments
 (0)