列表 链表
1、栈 : FILO(先进后出)
2、队列 : FIFO(先进先出)
#普通队列:
'''
class myQuene(object):
def __init__(self,list = []):
self.__list = list
def size(self):
return len(self.__list)
def delete(self):
if self.size() == 0:
print("空,不能删除")
else:
temp_delete = self.__list[0]
del self.__list[0]
return temp_delete
def insert(self,data):
self.__list.append(data)
def peek(self):
if self.size() == 0:
print("空")
else:
return self.__list[0]
m = myQuene()
'''
#优先级队列
'''
class myPQueue(object):
def __init__(self,list = []):
self.__list = list
def size(self):
return len(self.__list)
def delete(self):
if self.size() == 0:
print("空,不能删除")
else:
temp_delete = self.__list[0]
del self.__list[0]
return temp_delete
def insert(self,data):
if self.size() == 0:
self.__list.append(data)#若队列为空,将数据直接插入
else:
temp = -1
for i in range(len(self.__list)):
if self.__list[i] > data:
temp = i
break
if temp == -1:
self.__list.append(data)
else:
self.__list.insert(temp,data)
def peek(self):
if self.size() == 0:
print("空")
else:
return self.__list[0]
m = myPQueue()
m.insert(1)
m.insert(2)
m.insert(4)
m.insert(3)
print(m.delete())
print(m.delete())
print(m.delete())
print(m.delete())
'''
#循环队列
'''
class xunhuan():
def __init__(self,list=[],first=None,last=None):
self.__list = list
self.__first = first
self.__last = last
def size(self):
length = 0
if self.__last > self.__first:
length = self.__last - self.__first + 1
elif self.__first == self.__last and self.__last != None:
length = 1
elif self.__first == self.__last and self.__last == None:
length = 0
else:
length = len(self.__list) - (self.__first - self.__last - 1)
return length
def insert(self,data):
if self.size() == 0:
self.__list.append(data)
self.__first = 0
self.__last = 0
else:
if self.size() == len(self.__list):
self.__list.insert(self.__last+1,data)
self.__last = self.__last + 1
else:
if self.__last + 1 == len(self.__list):
self.__list[0] = data
self.__last = 0
else:
self.__list[self.__last + 1] = data
self.__last = self.__last + 1
def delete(self):
if self.size() == 0:
print("空,无法删除")
elif self.size() == 1:
temp = self.__list[self.__first]
self.__first = None
self.__last = None
return temp
else:
temp = self.__list[self.__first]
if self.__first + 1 == len(self.__list):
self.__first = 0
else:
self.__first = self.__first + 1
return temp
def peek(self):
if self.size() == 0:
print("空")
else:
return self.__list[self.__first]
'''
1、中缀表达式转后缀表达式
1)遇到操作数直接拼到字符串
2)遇到运算符
a,遇到左括号
b,遇到右括号
c,遇到±
d,遇到*/
2、计算后缀表达式
class NullStackError(BaseException):
def __init__(self):
super().__init__("null stack error !!!")
class MyStack():
def __init__(self,len=0,list=[]):
self.__len = 0
self.__list = list
def push(self,data):
self.__list.append(data)
self.__len += 1
def pop(self):
temp = None
if self.__len == 0:
raise NullStackError()
else:
temp = self.__list.pop()
self.__len -= 1
return temp
def peek(self):
if self.__len == 0:
raise NullStackError()
else:
return self.__list[-1]
def peekq(self):
if self.__len == 0:
raise NullStackError()
else:
return self.__list[::]
def length(self):
return self.__len
def middle2after(s=""):
str = ""
list = []
for item in s:
if item.isalnum():
str += item
else:
if item == "(":
list.append(item)
elif item == ")":
while list[-1] != "(":
str += list.pop()
list.pop()
elif item in "+-":
if len(list) == 0:
list.append(item)
else:
while len(list) != 0 and list[-1] != "(":
str += list.pop()
list.append(item)
elif item in "*/":
list.append(item)
else:
print("错了")
while len(list)!=0:
str += list.pop()
return str
def cal(s=""):
stack = []
for item in s:
if item.isalnum():
stack.append(item)
else:
a = float(stack.pop())
b = float(stack.pop())
if item == "-":
c = b - a
elif item == "+":
c = b + a
elif item == "*":
c = b * a
elif item == "/":
c = b / a
else:
print("有问题")
stack.append(c)
return stack.pop()
str = middle2after("1+3*(4+2)/5+(6+7*8-9)")
print(str)
print(cal(str))