数组实现栈和队列结构
固定大小数组实现栈结构
在栈的结构中,先进栈的元素后最后出来。利用固定大小数组实现栈结构的思路:首先有一个index指针,如果index为0表示栈为空,此时只能做push操作;如果index为数组的长度,说明栈已经满了,此时只能做pop操作和getStack返回栈顶元素操作。push操作的实现,当给栈压入一个元素时,index增加1;pop操作的实现,当弹出栈顶元素时,index减1。具体实现流程如下图所示:
代码实现:
1 class arrayToStack(object): 2 def __init__(self, size): 3 self.initSize= size 4 self.__list = [ 0 for _ in range(size) ] 5 self.index = 0 6 7 def push(self, item): 8 if self.index == self.initSize: 9 print("The Stack is full") 10 return 11 self.__list[self.index] = item 12 self.index += 1 13 14 def pop(self): 15 if self.index == 0: 16 print("The Stack is empty") 17 self.index -= 1 18 return self.__list[self.index] 19 20 def getStack(self): 21 index = self.index - 1 22 return self.__list[index] 23 24 def printStack(self): 25 stack = [self.__list[i] for i in range(self.index)] 26 print(stack)
固定大小数组实现队列结构
队列的结构是先进入队列的元素,先出队列。使用固定数组实现队列的思路:有两个指针start和end以及size表示当前队列的长度。start代表poll时所指的元素,poll一个元素start加1,size减1;end代表push时所指的位置,push一个元素end增加1,size加1。当size等于数组的长度时,此时队列已满,另end为0;当size等于0时,此时队列为空,另start为0。具体实现过程如下图所示:
代码实现:
1 class arrayToQueue(object): 2 def __init__(self, initSize): 3 self.initSize = initSize 4 self.__list = [ 0 for _ in range(initSize) ] 5 self.size = 0 6 self.start = 0 7 self.end = 0 8 9 def push(self, item): 10 if self.size == self.initSize: 11 print("The queue is full") 12 return 13 self.size += 1 14 self.__list[self.end] = item 15 if self.end == len(self.__list) - 1: 16 self.end = 0 17 else: 18 self.end += 1 19 20 def poll(self): 21 if self.size == 0: 22 print("The queue is empty") 23 return 24 self.size -= 1 25 i = self.__list[self.start] 26 if self.start == len(self.__list) - 1: 27 self.start = 0 28 else: 29 self.start += 1 30 return i 31 32 def printQueue(self): 33 return [self.__list[i] for i in range(self.start, self.start+self.size)]