10.20 BUAA ASE数据结构课程
1.类的属性
2.类的创建(栈、队列的模拟)
-
坐标类
class Coordinate():# 坐标类 def __init__(self,x,y): self.x=x self.y=y def distance(self,other): return(((self.x-other.x)**2+(self.y-other.y)**2)**0.5) def __str__(self): return '<' + str(self.x) + ',' + str(self.y) + '>' def __eq__(self, other): return self.x==other.x and self.y==other.y a=Coordinate(3,4) b=Coordinate(0,0) print("--------------1.两点距离------------------------------") print(a.distance(b)) print(Coordinate.distance(a,b)) print('---------------2.打印坐标----------------------------------') print(a) print('----------------3.判断坐标相等---------------------------------') print(a==b)
-
整数集合类
class intset(): #整数集合类 def __init__(self): self.v=[] def insert(self,num): if num not in self.v: self.v.append(num) else: return def member(self,num): return num in self.v def remove(self,num): try: self.v.remove(num) except ValueError: print(str(num)+' was not found!') a=intset() a.insert(3) a.remove(4)
-
十进制转二进制
from stack import* def convert2(num): remStack=Stack() while num!=0: remStack.push(num%2) num//=2 binstr='' while not remStack.isEmpty(): binstr=binstr+str(remStack.pop()) return binstr print(convert2(32))
-
十进制转十六进制
from stack import* def convert16(num): remStack = Stack() dig='0123456789ABCDEF' while num != 0: remStack.push(num % 16) num //= 16 binstr = '' while not remStack.isEmpty(): binstr = binstr + (dig[remStack.pop()]) return binstr print(convert16(32))
3.类的使用
-
括号匹配性(栈)
-
Hot_potato(队列,删掉下一轮第一个)
from queue import* def HP(namelist,num): s=Queue() for i in namelist: s.enqueue(i) while s.size()>1: for i in range(num): s.enqueue(s.dequeue()) print(s.dequeue()) return s.dequeue() if __name__=='__main__': print(HP(['a','b','c','d','e'],3))
-
Josephus Problem(总共41人,删掉每轮最后一个)
from queue import* def HP(sum,num): s=Queue() for i in range(1,sum+1): s.enqueue(str(i)) while s.size()>1: for i in range(1,num): s.enqueue(s.dequeue()) print(s.dequeue()) return s.dequeue() if __name__=='__main__': print(HP(41,3)
-
三明治问题