学习Python 第十二天

列表 链表
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))

猜你喜欢

转载自blog.csdn.net/weixin_44446703/article/details/87267186