每日一记
ADT:Abstract data type
单链表
双端链表
双向链表
双向链表:
#自定义一个空链表异常
class NullLinkedError(BaseException):
def __init__(self):
super().__init__("null linked error")
class node():
def __init__(self,data,pre=None,next=None):
self.__pre = pre
self.__data = data
self.__next = next
def get_pre(self):
return self.__pre
def set_pre(self,pre):
self.__pre = pre
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
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 = node(data=data)
if self.__len == 0:
self.__first = n
self.__last = n
else:
n.set_next(self.__first)
self.__first.set_pre(n)
self.__first = n
self.__len += 1
def insert_last(self,data):
n = node(data=data)
if self.__len == 0:
self.__first = n
self.__last = n
else:
self.__last.set_next(n)
n.set_pre(self.__last)
self.__last = n
self.__len += 1
def inser(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 updata_first(self,data):
if self.__len == 0:
raise NullLinkedError()
else:
self.__first.set_data(data)
def updata_last(self,data):
if self.__len == 0:
raise NullLinkedError()
else:
self.__last.set_data(data)
def updata(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("zs")
d.insert_first("ls")
d.insert_last("ww")
d.insert_last("ll")
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.__list = list
self.__len = 0
def push(self,data):
if self.__list==None:
self.__list = data
else:
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[::]
def length(self):
return self.__len
a = MyStack()
a.push(["a","b"])
b= a.peek()
print(b)
c = a.pop()
print(c)
中缀表达式 后缀表达式 前缀表达式
a + b * c abc*+ +*bca
(a+b)*c ab+c* *c+ab
(a+b)*(c-d)/e ab+cd-*e/ /e*-cd+ab