每日一记
1.栈
队列
#普通队列
class myQueue(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]
'''
'''
#优先级队列
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)-1):
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]
q = myPQueue()
q.insert(1)
q.insert(2)
q.insert(3)
q.insert(4)
print(q.delete())
print(q.delete())
print(q.delete())
print(q.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.__last==self.__first and self.__last!=None:
length = 1
elif self.__last == self.__first 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
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 = None
self.__last = None
return temp
else:
temp = self.__list
if self.__first+1==self.size():
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,计算后缀表达式
'''
def middle2after(s=""):
#rule ={"-":1,"+":1,"*":2,"/":2}
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))