数组实现栈和队列结构

固定大小数组实现栈结构

  在栈的结构中,先进栈的元素后最后出来。利用固定大小数组实现栈结构的思路:首先有一个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)
View Code

固定大小数组实现队列结构

  队列的结构是先进入队列的元素,先出队列。使用固定数组实现队列的思路:有两个指针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)]
View Code

猜你喜欢

转载自www.cnblogs.com/dabric/p/11758949.html