python数据结构:bitmap,list链表,树,图

#--coding:utf8--
'''栈'''
class stack1():
    def __init__(st,size):
        st.stack=[]
        st.size=size
        st.top = -1
    def push(st,content):
        if st.full():
            print "stack is full!"
        else:
            st.stack.append(content)
            st.top=st.top+1
    def full(st):
        if st.top == st.size:
            return  True
        else:
            return  False
    def empty(st):
        if st.top == -1:
            print "stack is empty"
        else:
            print("stack is not empty")
    def remove(self):
        if st.top == -1:
            print "stack is empty"
        print "remove st.stack[-1]:%d"%st.stack[-1]
        st.stack.pop()
        del st.stack[0]

'''树'''
class TRee():
    def __init__(self,leftjd=0,rightjd=0,data=0):
        self.leftjd = leftjd
        self.rightjd = rightjd
        self.data = data
class Btree():
    def __init__(self,base=0):
        self.base = base
    def empty(self):
        if self.base is 0:
            return  True
        else:
            return  False
    def qout(self,jd):
        ''''前序遍历 NLR 根左右'''
        if jd == 0:
            return
        print(jd.data)
        self.qout(jd.leftjd)
        self.qout(jd.rightjd)
    def mout(self,jd):
        '''中序遍历 LNR 左根中 先遍历左树返回根节点在遍历右树'''
        if jd ==0:
            return
        self.mout(jd.leftjd)
        print jd.data
        self.mout(jd.rightjd)
    def hout(self,jd):
        '''后续遍历 LRN 左右根 循环遍历左节点返回根节点在遍历右节点在打印根'''
        if jd ==0:
            return
        self.hout(jd.leftjd)
        self.hout(jd.rightjd)
        print jd.data

'''链表'''
class Node(object):
    def __init__(self, data):
        self.data = data
        self.next = None

class NodeList(object):
    def __init__(self, node):
        self.head = node
        self.head.next = None
        self.end = self.head

    def add_node(self, node):
        self.end.next = node
        self.end = self.end.next

    def length(self):
        node = self.head
        count = 1
        while node.next is not None:
            count += 1
            node = node.next
        return count

    # delete node and return it's value
    def delete_node(self, index):
        if index+1 > self.length():
            raise IndexError('index out of bounds')
        i = 0
        node = self.head
        while True:
            if i==index-1:
                break
            node = node.next
            i += 1
        tmp_node = node.next
        node.next = node.next.next
        return tmp_node.data

    def show(self):
        node = self.head
        node_str = ''
        while node is not None:
            if node.next is not None:
                node_str += str(node.data) + '->'
            else:
                node_str += str(node.data)
            node = node.next
        print node_str

    # Modify the original position value and return the old value
    def change(self, index, data):
        if index+1 > self.length():
            raise IndexError('index out of bounds')
        i = 0
        node = self.head
        while True:
            if i == index:
                break
            node = node.next
            i += 1
        tmp_data = node.data
        node.data = data
        return tmp_data

    # To find the location of index value
    def find(self, index):
        if index+1 > self.length():
            raise IndexError('index out of bounds')
        i = 0
        node = self.head
        while True:
            if i == index:
                break
            node = node.next
            i += 1
        return node.data
'''bitmap'''
class Bitmap():
    def __init__(self,max):
        self.size=int((max+31-1)/31)
        self.array=[0 for i in range(self.size)]
    def bitIndex(self,num):
        return num % 31
    def set(self,num):
        elemIndex = num / 31
        byteIndex = self.bitIndex(num)
        element = self.array[elemIndex]
        self.array[elemIndex] = element | (1<<byteIndex)
    def test(self,i):
        elemIndex = i/31
        byteIndex = self.bitIndex(i)
        if self.array[elemIndex] & (1<<byteIndex):
            return  True
        return  False

if __name__ == "__main__":
     '''栈'''
    st = stack1(10)
    for i in range(10,22):
        st.push(i)
    st.empty()
    st.full()
    st.remove()
     '''树'''
    jd1 = TRee(data=8)
    jd2 = TRee(data=9)
    jd3 = TRee(data=23)
    jd4 = TRee(data=36)
    jd5 = TRee(data=57)
    jd6 = TRee(data=58)
    b3 = TRee(jd5,jd6,data=jd3)
    b1 = TRee(0,b3,data=jd1)
    b4 =TRee(data=jd4)
    b2=TRee(0,b4,data=jd2)
    base = TRee(b1,b2,data=7)
    x = Btree(base)
    x.qout(x.base)
     '''链表'''
    #test case
    n1 = Node(0)
    n2 = Node(1)
    n3 = Node(2)
    n4 = Node(3)
    n5 = Node(4)
    node_list = NodeList(n1)
    node_list.add_node(n2)
    node_list.add_node(n3)
    node_list.add_node(n4)
    node_list.add_node(n5)
    #node = node_list.delete_node(3)
    #print node
    #d = node_list.change(0,88)
    # data = node_list.find(5)
    # print data
    node_list.show()

    li = list()
    li.append(0)
    li.append(1)
    li.append(2)
    li.append(4)
    li.append(5)
    li.insert(3,3)
    for i in li:
        print(i)
    li.pop(3)
    for i in li:
        print(i)
    '''bitmap'''
    #ord()转换成ascii码
    #chr()ascii码转成字符串
    MAX=ord('z')
    suffle_array=[x for x in 'coledraw']
    result = []
    bitmap = Bitmap(MAX)
    for c in suffle_array:
        bitmap.set(ord(c))
    for i in range(MAX+1):
        if bitmap.test(i):
            result.append(chr(i))

    print ('原始数组:%s' %suffle_array)
    print ('排序后的数组:%s' %result)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值