北航数据结构笔记系列三

10.20 BUAA ASE数据结构课程

1.类的属性


2.类的创建(栈、队列的模拟)

  1. 坐标类

    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)
    
  2. 整数集合类

    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)
    
  3. 十进制转二进制

    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))
    
  4. 十进制转十六进制

    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.类的使用

  1. 括号匹配性(栈)

  2. 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))
    
  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)
    
  4. 三明治问题

    
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值