Pytnon0126总结
双向链表
#自定义异常
class NullLinkedError(BaseException):
def __init__(self):
super().__init__("null linked error")
class node():
#content:创建节点,表示链表中元素,有三个属性,
# pre-前驱结点地址
# data-数据
# next-后继结点地址
def __init__(self,data,pre=None,next=None):
self.__pre = pre
self.__data = data
self.__next = next
def get_data(self):
return self.__data
def set_data(self,data):
self.__data = data
def get_next(self):
return self.__next
def set_next(self,next):
self.__next = next
def get_pre(self):
return self.__pre
def set_pre(self,pre):
self.__pre = pre
#定义双向链表类
class double_linked():
def __init__(self,len=0,first=None,last=None):
self.__len = 0
self.__first = first
self.__last = last
#增
#增加头结点
def insert_first(self,data):
#定义当前要增加的节点n
n = node(data)
#判断是否为空
if self.__first == None:
self.__first = n
self.__last = n
else:
#不为的话,则插入n为结点
n.set_next(self.__first) #n 的下一个节点则为 self.__first
self.__first.set_pre(n) #self.__first的前驱就应该等于n的地址
self.__first = n #则头结点就是n
self.__len +=1 #长度循环
def insert_last(self,data):
n = node(data=data)
if self.__len == 0:
self.__first = n
self.__last = n
else:
n.set_pre(self.__last)
self.__last.set_next(n)
self.__last = n
self.__len += 1
def insert(self,data0,data):
n = node(data=data)
if self.__len == 0:
raise NullLinkedError()
else:
currentnode = self.__first
flag = False
while currentnode!=None:
if currentnode.get_data()==data0:
if currentnode.get_next()!=None:
n.set_next(currentnode.get_next())
n.set_pre(currentnode)
currentnode.set_next(n)
currentnode.get_next().set_pre(n)
self.__len += 1
else:
self.insert_last(data)
flag = True
break
else:
currentnode = currentnode.get_next()
if flag:
print("插入成功")
else:
print("插入失败")
#删除头结点,若空抛出异常,否则删除头元素
def delete_first(self):
if self.__len == 0:
raise NullLinkedError()
else:
if self.__len == 1:
self.__first = None
self.__last = None
else:
self.__first = self.__first.get_next()
self.__first.set_pre(None)
self.__len -= 1
# 删除尾结点,若空抛出异常,否则删除尾元素
def delete_last(self):
if self.__len == 0:
raise NullLinkedError()
else:
if self.__len == 1:
self.__first = None
self.__last = None
else:
self.__last = self.__last.get_pre()
self.__last.set_next(None)
self.__len -= 1
def delete(self,data):
if self.__len == 0:
raise NullLinkedError()
elif self.__len == 1 :
if self.__first.get_data()==data:
self.__first = None
self.__last = None
self.__len -= 1
else:
currentnode = self.__first
while currentnode!=None:
if currentnode.get_data()==data:
if currentnode.get_pre()==None:
self.delete_first()
elif currentnode.get_next()==None:
self.delete_last()
else:
currentnode.get_pre().set_next(currentnode.get_next())
currentnode.get_next().set_pre(currentnode.get_pre())
self.__len -= 1
break
else:
currentnode = currentnode.get_next()
def update_first(self,data):
if self.__len == 0:
raise NullLinkedError()
else:
self.__first.set_data(data)
def update_last(self,data):
if self.__len == 0:
raise NullLinkedError()
else:
self.__last.set_data(data)
def update(self,data0,data):
if self.__len == 0:
raise NullLinkedError()
else:
currentnode = self.__first
flag = False
while currentnode!=None:
if currentnode.get_data()==data0:
currentnode.set_data(data)
flag = True
break
else:
currentnode = currentnode.get_next()
if flag:
print("修改成功")
else:
print("修改失败")
def show_info(self):
if self.__len == 0:
print("空链表")
else:
currentnode = self.__first
while currentnode!=None:
print(currentnode.get_data())
currentnode = currentnode.get_next()
def length(self):
return self.__len
d = double_linked()
'''
'''
d.insert_first("李宏宇")
d.insert_first("caoyang")
d.insert_last("huojinxu")
d.insert_last("wangyexiu")
print(d.length())
d.show_info()
d.delete_first()
d.delete_last()
print(d.length())
d.show_info()
'''
'''
d.insert_first("zzz")
d.insert_last("c'c")
d.insert_last("hh")
d.delete("cc")
d.show_info()
print(d.length())
栈实现:
#自定义异常
class NullStackError(BaseException):
def __init__(self):
super().__init__("null stack error !!!")
class MyStack():
def __init__(self,len=0,list=None):
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 length(self): #长度
return self.__len
前缀表达式 中缀表达式 后缀表达式
中缀表达式:a+bc-d 后缀表达式:abc+d- 前缀表达式:-d+*bca
中缀表达式:(a+b)c 后缀表达式:ab+c 前缀表达式:c+ab
中缀表达式:(a+b)(c-d)/e 后缀表达式:ab+cd-e/ 前缀表达式:/e-cd+ab
注:可用栈进行变换,级别高去除级别低入栈等待,有括号左括号开始后出现右括号时取中间所有运算符号