栈,队列,图,二叉树-排序-python

class PyStack:
    def __init__(self, size = 20):
        self.stack = []          
        self.size = size
        self.top = -1      #栈顶位置
    def setSize(self, size):
        self.size = size
    def push(self, item):
        if self.isFull():
            raise StackException('StackOverFlow')
        else:
            self.stack.append(item)
            self.top += 1
    def pop(self):
        if self.isEmpty():
            raise StackException('StackUnderFlow')
        else:
            item = self.stack[-1]
            self.top -= 1
            del self.stack[-1]
            return item
    def Top(self):
        #获取栈顶位置
        return self.top
    def empty(self):
        self.stack = []
        self.top = -1
    def isEmpty(self):
        if self.top == -1:
            return True
        else:
            return False
    def isFull(self):
        if self.top == self.size - 1:
            return True
        else:
            return False
class StackException(Exception):
    #定义异常类
    def __init__(self, data):
        self.data = data
    def __str__(self):
        return self.data

队列

class Queue:
    def __init__(self, size = 20):
        self.queue = []
        self.size = size
        self.end = -1
    def setSize(self, size):
        self.size = size
    def In(self, item):
        if self.end < self.size - 1:
            self.queue.append(item)
            self.end += 1
        else:
            raise QueueException("QueueFull")
    def Out(self):
        if self.end != -1:
            item = self.queue[0]
            self.queue = self.queue[1:]
            self.end -= 1
            return item
        else:
            raise QueueException("QueueEmpty")
    def End(self):
        return self.end
    def empty(self):
        self.queue = []
        self.end = -1
class QueueException(Exception):
    def __init__(self, data):
        self.data = data
    def __str__(self):
        return self.data

def main():
    G = ['G', []]
    H = ['H', []]
    I = ['I', []]
    K = ['K', []]
    E = ['E', [G, H, I, K]]
    D = ['D', []]
    F = ['F', []]
    A = ['A', [D , E]]
    B = ['B', []]
    C = ['C', [F]]
    ROOT = ['ROOT', [A, B, C]]
    print(ROOT)

if __name__ == "__main__":
    main()

图的路径探索
路径探索

def searchGraph(graph, start, end):
    results = []
    generatePath(graph, [start], end, results)
    results.sort(key = lambda x:len(x))
    return results

def generatePath(graph, path, end, results):
    state = path[-1]
    if state == end:
        results.append(path)
    else:
        for arc in graph[state]:
            if arc not in path:
                generatePath(graph, path + [arc], end, results)

if __name__ == "__main__":
    Graph = {'A': ['B','C','D'], 'B': ['E'], 'C': ['D', 'F'], 'D': ['B', 'E', 'G'], 'E': [], 'F': ['D', 'G'], 'G': ['E']}
    R = searchGraph(Graph, 'A', 'D')
    for i in R:
        print(i)

二叉树

class BTree:
    def __init__(self, value):
        self.left = None
        self.value = value
        self.right = None
    def insertLeft(self, value):
        self.left = BTree(value)
        return self.left
    def insertRight(self, value):
        self.right = BTree(value)
        return self.right
    def show(self):
        print(self.data)

def preorder(node):
    #先序遍历
    if node.data:
        node.show()
        if node.left:
            preorder(node.left)
        if node.right:
            preorder(node.right)

def inorder(node):
    #中序遍历
    if node.data:
        if node.left:
            inorder(node.left)
        node.show()
        if node.right:
            inorder(node.right)

def postorder(node):
    if node.data:
        if node.left:
            postorder(node.left)
        if node.right:
            postorder(node.right)
        node.show()

二叉树排序

class BTree:
    def __init__(self, value):
        self.left = None
        self.data = value
        self.right = None
    def insertLeft(self, value):
        self.left = BTree(value)
        return self.left
    def insertRight(self, value):
        self.right = BTree(value)
        return self.right
    def show(self):
        print(self.data)

def inorder(node):
    #中序遍历,从小到大排序
    if node.data:
        if node.left:
            inorder(node.left)
        node.show()
        if node.right:
            inorder(node.right)

def rinorder(node):
    #中序遍历,先遍历右子树,从大到小排序
    if node.data:
        if node.right:
            rinorder(node.right)
        node.show()
        if node.left:
            rinorder(node.left)

def insert(node, value):
    if value > node.data:
        if node.right:
            insert(node.right, value)
        else:
            node.insertRight(value)
    else:
        if node.left:
            insert(node.left, value)
        else:
            node.insertLeft(value)

if __name__ == "__main__":
    l = [3,5,7,20,43,2,15,30]
    Root = BTree(l[0])
    node = Root
    for i in range(1, len(l)):
        insert(Root, l[i])

inorder(Root)
print("--------------------------")
rinorder(Root)

快速排序

def partition(lyst, low, high):
    pivotkey = lyst[low]
    while low < high:
        while low < high and lyst[high] >= pivotkey:
            high -= 1
        lyst[low] = lyst[high]
        while low < high and lyst[low] <= pivotkey:
            low += 1
        lyst[high] = lyst[low]
    lyst[low] = pivotkey
    return low

def qSort(lyst, low, high):
    if low < high :
        pivotloc =partition(lyst, low, high)
        qSort(lyst, low, pivotloc - 1)
        qSort(lyst, pivotloc + 1, high)

def quickSort(lyst):
    qSort(lyst, 0, len(lyst) - 1)

def main():
    x = [12,23,1,5,123,89,57]
    print(x)
    quickSort(x)
    print(x)

if __name__ == "__main__":
    main()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值