Python實現--隊列的順序存儲和鏈式存儲

隊列:允許插入的一端爲隊頭front,允許刪除的一端爲隊尾rear,先進先出的原則。
順序隊列:sequential queue
隊尾指針指示隊尾元素在一維數組中的當前位置,隊頭指針指示隊頭元素在一維數組中當前位置的前一個位置,空隊列self.front= self.rear = 0
鏈式隊列:linked queue 不需要指定長度,一般不會產生隊滿
一個同時帶有頭指針和尾指針的單鏈表,頭指針指向頭結點,尾指針指向尾結點

class SequenceSqueue(object):
	def __init__(self,maxsize):
		self.maxsize = maxsize
		self.data = [None for _ in range(maxsize)]
		#self.data = list(None for x in range(maxsize))
		self.front = 0
		self.rear = 0

	def isEmpty(self):
		if self.front == self.rear:
			print True
		else:
			print False


	def getLength(self):
		print self.rear - self.front


	def En_Queue(self,x):
		if self.rear < self.maxsize:
			self.rear = self.rear + 1
			self.data[self.rear] = x
		else:
			print 'queue is full!'

	def init_queue(self):
		element = input('please input a element,# for end:')
		while element != '#':
			self.En_Queue(element)
			element = input('please input a element,# for end:')

	def show_queue(self):
		if self.front == self.rear:
			print 'queue is empty!'
		else:
			index = self.front + 1
			store = []
			while index < self.rear + 1:
				store.append(self.data[index])
				index  = index + 1
			print store

	def Del_Queue(self):
		if self.front == self.rear:
			print 'queue is empty!'
		else:
			self.front = self.front + 1
			print self.data[self.front]

	def Queue_Head(self):
		if self.front == self.rear:
			print 'queue is empty!'
		else:
			print self.data[self.front + 1]
	def clear_queue(self):
		self.front = self.rear
		print 'clear over!'

if __name__ == '__main__':
	q= SequenceSqueue(100)
	q.isEmpty()
	q.init_queue()
	q.show_queue()
	q.Queue_Head()
	q.En_Queue('new')
	q.Del_Queue()
	q.show_queue()
	q.getLength()

輸出:
True
please input a element,# for end:1
please input a element,# for end:2
please input a element,# for end:3
please input a element,# for end:’#’
[1, 2, 3]
1
1
[2, 3, ‘new’]
3

class Node(object):
#must give a param data = None, En_Queue will use
	def __init__(self,data = None):
		self.data = data
		self.next = None

class LinkedQueue(object):
	def __init__(self):
		self.front = Node()
		self.rear = Node()
		self.length = 0

	def isEmpty(self):
		if self.length == 0:
			print True
		else:
			print False
	def getLength(self):
		print self.length

	def En_Queue(self,item):
		temp = Node(item)
		#if use self.isEmpty.everyrtime init will print True or False
		if self.length == 0:
			self.front = temp
			self.rear = temp
		else:
			self.rear.next = temp
			self.rear = temp
		self.length = self.length + 1

	def init_queue(self):
		data = input('please input item, # for end:')
		while data != '#':
			self.En_Queue(data)
			#self.length = self.length + 1
			data = input('please input item, # for end:')

	def Del_Queue(self):
		if self.length == 0 :
			print 'queue is null!'
		else:
			temp = self.front.data
			self.front = self.front.next
			self.length = self.length - 1
			print temp

	def Queue_Head(self):
		if self.length == 0 :
			print 'queue is null!'
		else:
			print self.front.data

	def show_queue(self):
		if self.length == 0 :
			print 'queue is null!'
		else:
			store = []
			temp, count = self.front, self.length
			while count > 0:
				store.append(temp.data)
				temp = temp.next
				count =  count - 1
			print store



if __name__ == '__main__':
	q= LinkedQueue()
	q.isEmpty()
	q.init_queue()
	q.show_queue()
	q.Queue_Head()
	q.En_Queue('ennew')
	q.Del_Queue()
	q.show_queue()
	q.getLength()

輸出
True
please input item, # for end:1
please input item, # for end:2
please input item, # for end:3
please input item, # for end:4
please input item, # for end:’#’
[1, 2, 3, 4]
1
1
[2, 3, 4, ‘ennew’]
4
參考連接:https://blog.csdn.net/lqzhouxx/article/details/40863749

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章