您的位置:首页 > 理论基础 > 数据结构算法

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

2016-01-05 17:14 423 查看
#--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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: