1
- from pydatastructs .linear_data_structures import OneDimensionalArray
1
+ from pydatastructs .linear_data_structures import DynamicOneDimensionalArray
2
2
from copy import deepcopy as dc
3
3
4
4
__all__ = [
@@ -19,13 +19,7 @@ class Stack(object):
19
19
By default, 'array'
20
20
Currently only supports 'array'
21
21
implementation.
22
- maxsize : int
23
- The maximum size of the stack.
24
- For array implementation.
25
- top : int
26
- The top element of the stack.
27
- For array implementation.
28
- items : OneDimensionalArray
22
+ items : DynamicOneDimensionalArray
29
23
Optional, by default, None
30
24
The inital items in the stack.
31
25
For array implementation.
@@ -39,12 +33,12 @@ class Stack(object):
39
33
=======
40
34
41
35
>>> from pydatastructs import Stack
42
- >>> s = Stack(maxsize=5, top=0 )
36
+ >>> s = Stack()
43
37
>>> s.push(1)
44
38
>>> s.push(2)
45
39
>>> s.push(3)
46
40
>>> str(s)
47
- '[1, 2, 3, None, None ]'
41
+ '[1, 2, 3]'
48
42
>>> s.pop()
49
43
3
50
44
@@ -57,8 +51,6 @@ class Stack(object):
57
51
def __new__ (cls , implementation = 'array' , ** kwargs ):
58
52
if implementation == 'array' :
59
53
return ArrayStack (
60
- kwargs .get ('maxsize' , None ),
61
- kwargs .get ('top' , 0 ),
62
54
kwargs .get ('items' , None ),
63
55
kwargs .get ('dtype' , int ))
64
56
raise NotImplementedError (
@@ -82,46 +74,36 @@ def peek(self):
82
74
83
75
class ArrayStack (Stack ):
84
76
85
- __slots__ = ['maxsize' , 'top' , ' items' , 'dtype' ]
77
+ __slots__ = ['items' , 'dtype' ]
86
78
87
- def __new__ (cls , maxsize = None , top = 0 , items = None , dtype = int ):
88
- if not _check_type (maxsize , int ):
89
- raise ValueError ("maxsize is missing." )
90
- if not _check_type (top , int ):
91
- raise TypeError ("top is not of type int." )
79
+ def __new__ (cls , items = None , dtype = int ):
92
80
if items is None :
93
- items = OneDimensionalArray (dtype , maxsize )
94
- if not _check_type (items , OneDimensionalArray ):
95
- raise ValueError ("items is not of type, OneDimensionalArray" )
96
- if items ._size > maxsize :
97
- raise ValueError ("Overflow, size of items %s is greater "
98
- "than maxsize, %s" % (items ._size , maxsize ))
81
+ items = DynamicOneDimensionalArray (dtype , 0 )
82
+ else :
83
+ items = DynamicOneDimensionalArray (dtype , items )
99
84
obj = object .__new__ (cls )
100
- obj .maxsize , obj . top , obj . items , obj .dtype = \
101
- maxsize , top , items , items ._dtype
85
+ obj .items , obj .dtype = \
86
+ items , items ._dtype
102
87
return obj
103
88
104
89
def push (self , x ):
105
- if self .top == self .maxsize :
106
- raise ValueError ("Stack is full." )
107
- self .items [self .top ] = self .dtype (x )
108
- self .top += 1
90
+ self .items .append (x )
109
91
110
92
def pop (self ):
111
- if self .top == 0 :
112
- raise ValueError ("Stack is already empty. " )
113
- self . top -= 1
114
- r = self .items [self .top ]
115
- self .items [ self .top ] = None
116
- return r
93
+ if self .is_empty :
94
+ raise ValueError ("Stack is empty" )
95
+
96
+ top_element = dc ( self .items [self .items . _last_pos_filled ])
97
+ self .items . delete ( self .items . _last_pos_filled )
98
+ return top_element
117
99
118
100
@property
119
101
def is_empty (self ):
120
- return self .top == 0
102
+ return self .items . _last_pos_filled == - 1
121
103
122
104
@property
123
105
def peek (self ):
124
- return self .items [self .top - 1 ]
106
+ return self .items [self .items . _last_pos_filled ]
125
107
126
108
def __str__ (self ):
127
109
"""
0 commit comments