常用数据结构Python实现

二分查找

 1 #!/usr/bin/python
 2 # -*- coding: UTF-8 -*-
 3 # added by kangye, dependent on python27
 4
 5 def BinarySearch(l,key):
 6     low=0
 7     high=len(l)-1
 8     i=0
 9     while(low <= high):
10         i = i+1
11         mid = low + ((high-low)>>1)
12         if(l[mid] < key):
13             low = mid + 1
14         elif (l[mid] > key):
15             high = mid -1
16         else:
17             print "use %d times" % i
18             return mid
19     return -1
20
21 if __name__ == "__main__":
22     l=[1,4,5,6,7,8,9,44,333,2233]
23     print l
24     print BinarySearch(l,4)
25     print BinarySearch(l,44)
26     print BinarySearch(l,8)
27     print BinarySearch(l,2233)
28     print BinarySearch(l,77)

B树

 1 #!/usr/bin/python
 2 # -*- coding: UTF-8 -*-
 3 # added by kangye, dependent on python27
 4
 5 class BTree:
 6     def __init__(self,value):
 7         self.left=None
 8         self.data=value
 9         self.right=None
10
11     def insertLeft(self,value):
12         self.left=BTree(value)
13         return self.left
14
15     def insertRight(self,value):
16         self.right=BTree(value)
17         return self.right
18
19     def show(self):
20         print self.data
21
22 def preorder(node):
23     if node.data:
24         node.show()
25         if node.left:
26             preorder(node.left)
27         if node.right:
28             preorder(node.right)
29
30 def inorder(node):
31     if node.data:
32         if node.left:
33             inorder(node.left)
34         node.show()
35         if node.right:
36             inorder(node.right)
37
38 def postorder(node):
39     if node.data:
40         if node.left:
41              postorder(node.left)
42         if node.right:
43             postorder(node.right)
44         node.show()
45
46 if __name__ == "__main__":
47
48     Root=BTree("root")
49     A=Root.insertLeft("A")
50     C=A.insertLeft("C")
51     D=C.insertRight("D")
52     F=D.insertLeft("F")
53     G=D.insertRight("G")
54     B=Root.insertRight("B")
55     E=B.insertRight("E")
56
57     print "pre-traversal"
58     preorder(Root)
59
60     print "in-traversal"
61     inorder(Root)
62
63     print "post-traversal"
64     postorder(Root)
65
66         

 1 #!/usr/bin/python
 2 # -*- coding: UTF-8 -*-
 3 # added by kangye, dependent on python27
 4
 5 def searchGraph(graph,start,end):
 6     results=[]
 7     generatePath(graph,[start],end,results)
 8     results.sort(lambda x,y:cmp(len(x),len(y)))
 9     return results
10
11 def generatePath(graph,path,end,results):
12     state=path[-1]
13     if state == end:
14         results.append(path)
15     else:
16         for arc in graph[state]:
17             if arc not in path:
18                 generatePath(graph,path+[arc],end,results)
19
20
21 if __name__ == "__main__":
22         Graph={
23               ‘A‘:[‘B‘,‘C‘,‘D‘],
24               ‘B‘:[‘E‘],
25               ‘C‘:[‘D‘,‘F‘],
26               ‘D‘:[‘B‘,‘E‘,‘G‘],
27               ‘E‘:[],
28               ‘F‘:[‘D‘,‘G‘],
29               ‘G‘:[‘E‘]
30               }
31         r = searchGraph(Graph,‘A‘,‘D‘)
32         print "A to D"
33         for i in r:
34             print i
35
36         r=searchGraph(Graph,‘A‘,‘E‘)
37         print "A to E"
38         for i in r:
39             print i

队列

 1 #!/usr/bin/python
 2 # -*- coding: UTF-8 -*-
 3 # added by kangye, dependent on python27
 4
 5 class Queue:
 6     def __init__(self,size=20):
 7         self.queue=[]
 8         self.size=size
 9         self.end=-1
10
11     def setSize(self,size):
12         self.size=size
13
14     def In(self,element):
15         if self.end < self.size -1:
16             self.queue.append(element)
17             self.end = self.end + 1
18         else:
19             raise "QueueFull"
20
21     def Out(self):
22         if self.end != -1:
23             element = self.queue[0]
24             self.queue=self.queue[1:]
25             self.end = self.end-1
26             return element
27         else:
28             raise "QueueEmpty"
29
30     def End(self):
31         return self.end
32
33     def empty(self):
34         self.queue=[]
35         self.end=-1
36
37 if __name__ == "__main__":
38
39     queue=Queue()
40     for i in range(10):
41         queue.In(i)
42     print queue.End()
43
44     for i in range(10):
45         print queue.Out()
46
47             

 1 #!/usr/bin/python
 2 # -*- coding: UTF-8 -*-
 3 # added by kangye, dependent on python27
 4
 5 class Stack:
 6     def __init__(self,size=20):
 7         self.stack= []
 8         self.size= size;
 9         self.top= -1
10
11     def setSize(self,size):
12         self.size=size;
13
14     def push(self,element):
15         if self.isFull():
16             raise "StackOverflow"
17         else:
18             self.stack.append(element)
19             self.top = self.top + 1
20
21     def pop(self):
22         if self.isEmpty():
23             raise "StackUnderflow"
24         else:
25             element=self.stack[-1]
26             self.top=self.top-1;
27             del self.stack[-1]
28             return element
29
30     def Top(self):
31         return self.top
32
33     def empty(self):
34         self.stack=[]
35         self.top=-1
36
37     def isEmpty(self):
38         if self.top == -1:
39             return True
40         else:
41             return False
42
43     def isFull(self):
44         if self.top == self.size-1:
45             return True
46         else:
47             return False
48
49 if  __name__ == "__main__":
50
51     stack=Stack()
52
53     for i in range(10):
54         stack.push(i)
55     print stack.Top()
56
57     for i in range(10):
58        print stack.pop()
59
60     stack.empty()
61     print stack.Top()
62
63             
时间: 2024-12-30 03:04:06

常用数据结构Python实现的相关文章

python 常用数据结构使用

python 字典排序 http://www.cnblogs.com/kaituorensheng/archive/2012/08/07/2627386.html 函数原型 sorted(dic,value,reverse) dic为比较函数,value 为排序的对象(这里指键或键值), reverse:注明升序还是降序,True--降序,False--升序(默认) 案例 dic = {'a':3 , 'b':2 , 'c': 1} 注意 排序之后原字典没有变,顺序依旧 python 常用数据结

python 字符串和常用数据结构

字符串和常用数据结构 使用字符串 第二次世界大战促使了现代电子计算机的诞生,当初的想法很简单,就是用计算机来计算导弹的弹道,因此在计算机刚刚诞生的那个年代,计算机处理的信息主要是数值,而世界上的第一台电子计算机ENIAC每秒钟能够完成约5000次浮点运算.随着时间的推移,虽然对数值运算仍然是计算机日常工作中最为重要的事情之一,但是今天的计算机处理得更多的数据都是以文本信息的方式存在的,而Python表示文本信息的方式我们在很早以前就说过了,那就是字符串类型.所谓字符串,就是由零个或多个字符组成的

Python学习-第二天-字符串和常用数据结构

Python学习-第二天-字符串和常用数据结构 字符串的基本操作 def main(): str1 = 'hello, world!' # 通过len函数计算字符串的长度 print(len(str1)) # 13 # 获得字符串首字母大写的拷贝 print(str1.capitalize()) # Hello, world! # 获得字符串变大写后的拷贝 print(str1.upper()) # HELLO, WORLD! # 从字符串中查找子串所在位置 print(str1.find('o

算法数据结构02 /常用数据结构

目录 2算法数据结构02 /常用数据结构 1. 栈 2. 队列 3. 双端队列 4. 内存相关 5. 顺序表 6. 链表 7. 二叉树 2算法数据结构02 /常用数据结构 1. 栈 特性:先进后出的数据结构,有栈顶和栈尾 应用场景:每个 web 浏览器都有一个返回按钮.浏览网页时,这些网页被放置在一个栈中(实际是网页的网址).现在查看的网页在顶部,第一个查看的网页在底部.如果按'返回'按钮,将按相反的顺序浏览刚才的页面. 栈的方法: Stack():创建一个空的新栈. 它不需要参数,并返回一个空

常用数据结构及算法C#实现

常用数据结构及算法C#实现 1.冒泡排序.选择排序.插入排序(三种简单非递归排序) 1 int[] waitSort = { 1,0, 12, 13, 14, 5, 6, 7, 8, 9, 10 }; 2 3 //冒泡排序 4 int length = waitSort.Length; 5 6 for (int i = 0; i < length; i++) 7 { 8 for (int j = i + 1; j < length; j++) 9 { 10 if (waitSort[j] &g

【转】常用数据结构及复杂度

常用数据结构及复杂度 常用数据结构的时间复杂度 Data Structure Add Find Delete GetByIndex Array (T[]) O(n) O(n) O(n) O(1) Linked list (LinkedList<T>) O(1) O(n) O(n) O(n) Resizable array list (List<T>) O(1) O(n) O(n) O(1) Stack (Stack<T>) O(1) - O(1) - Queue (Qu

常用数据结构及复杂度

常用数据结构的时间复杂度 Data Structure Add Find Delete GetByIndex Array (T[]) O(n) O(n) O(n) O(1) Linked list (LinkedList<T>) O(1) O(n) O(n) O(n) Resizable array list (List<T>) O(1) O(n) O(n) O(1) Stack (Stack<T>) O(1) - O(1) - Queue (Queue<T>

[ZZ]常用数据结构及复杂度

http://www.cnblogs.com/gaochundong/p/3813252.html 常用数据结构的时间复杂度 Data Structure Add Find Delete GetByIndex  Array (T[]) O(n) O(n) O(n) O(1)  Linked list (LinkedList<T>) O(1) O(n) O(n) O(n)  Resizable array list (List<T>) O(1) O(n) O(n) O(1)  Sta

Lua 常用数据结构

Lua中的table不是一种简单的数据结构,它可以作为其它数据结构的基础.如数组.记录.线性表.队列和集合等,在Lua中都可以通过table来表示. 一.数组 在lua中通过整数下标访问表中的元素即可简单的实现数组.并且数组不必事先指定大小,大小可以随需要动态的增长. a = {} for i = 1,100 do a[i] = 0 end print("The length of array 'a' is " .. #a) squares = {1, 4, 9, 16, 25} pr