zoukankan      html  css  js  c++  java
  • python之 算法和数据结构

    什么是计算机科学?

      --首先明确的一点就是计算机科学不仅仅是对计算机的研究,虽然计算机在科学发展的过程中发挥了重大的作用,但是它只是一个工具,一个没有灵魂的工具而已,所谓的计算机科学实际上是对问题,解决问题以及解决问题的过程中产生的解决方案的研究.

    意义:

      --数据结构和算法思想的通常性异常的强大,在任何语言中都被使用,它们将会是我们编程生涯张伴随我们最长久利器.

      --数据结构和算法思想也可以帮助我们扩展和历练编码的思想,可以让我们更好的融入到编程世界的角角落落.

    数据结构

      --特性:先进后出的数据结构

      --栈顶,栈尾

    Stack() 创建一个空的新栈。 它不需要参数,并返回一个空栈。
    push(item)将一个新项添加到栈的顶部。它需要 item 做参数并不返回任何内容。
    pop() 从栈中删除顶部项。它不需要参数并返回 item 。栈被修改。
    peek() 从栈返回顶部项,但不会删除它。不需要参数。 不修改栈。
    isEmpty() 测试栈是否为空。不需要参数,并返回布尔值。
    size() 返回栈中的 item 数量。不需要参数,并返回一个整数
    关键字
    class Stack():
        def __init__(self):
            self.items=[]
        def push(self,item):
            self.items.append(item)
        def isEmpty(self):
            return self.items==[]
        def pop(self):
            if self.isEmpty():
                return ''
            else:
                return self.items.pop()
        def peek(self):
            return self.items[len(self.items)-1]
        def size(self):
            return  len(self.items)
    
    a=Stack()
    a.push(1)
    a.push(2)
    print(a.peek())
    print(a.pop())
    print(a.size())
    View Code

    队列

      --特性:先进先出

    Queue() 创建一个空的新队列。 它不需要参数,并返回一个空队列。
    enqueue(item) 将新项添加到队尾。 它需要 item 作为参数,并不返回任何内容。
    dequeue() 从队首移除项。它不需要参数并返回 item。 队列被修改。
    isEmpty() 查看队列是否为空。它不需要参数,并返回布尔值。
    size() 返回队列中的项数。它不需要参数,并返回一个整数。
    关键字
    class Queue():
        def __init__(self):
            self.items=[]
        def enqueue(self,item):
            self.items.insert(0,item)
        def isEmpty(self):
            return self.items==[]
        def dequeue(self):
            if self.isEmpty():
                return ''
            else:
                return self.items.pop()
        def size(self):
            return  len(self.items)
        def travel(self):
            print(self.items)
    q=Queue()
    q.enqueue(1)
    q.enqueue(2)
    print(q.size())
    print(q.travel())
    View Code

    双端队列

      --同列相比,两个头部和尾部.可以在双端进行数据的插入和删除,提供了单数据结构中栈和队列的特性

    Deque() 创建一个空的新 deque。它不需要参数,并返回空的 deque。
    addFront(item) 将一个新项添加到 deque 的首部。它需要 item 参数 并不返回任何内容。
    addRear(item) 将一个新项添加到 deque 的尾部。它需要 item 参数并不返回任何内容。
    removeFront() 从 deque 中删除首项。它不需要参数并返回 item。deque 被修改。
    removeRear() 从 deque 中删除尾项。它不需要参数并返回 item。deque 被修改。
    isEmpty() 测试 deque 是否为空。它不需要参数,并返回布尔值。
    size() 返回 deque 中的项数。它不需要参数,并返回一个整数。
    关键字
    class Dequeue():
        def __init__(self):
            self.items = []
        def addFont(self,item):
            self.items.append(item)
        def addRear(self,item):
            self.items.insert(0,item)
        def isEmpty(self):
            return self.items == []
        def removeFont(self):
            if self.isEmpty():
                return None
            else:
                return self.items.pop()
        
        def removeRear(self):
            if self.isEmpty():
                return None
            else:
                return self.items.pop(0)
        def size(self):
            return len(self.items)
    View Code

    算法

    冒泡排序

    list=[1,4,6,5,2,3]
    
    # def sort(alist):
    #     length = len(alist)
    #     for i in  range(0,length-1):
    #         for j in range(0,length-1-i):  #6-1
    #             print(list)
    #             print(alist[j+1])
    #             if alist[j] >alist[j+1]:
    #                 alist[j],alist[j+1]=alist[j+1],alist[j]
    #
    # sort(list)
    #
    #
    # print(list)
    #思想:每次比较来年各个相邻的元素,如果他们的顺序错误就把他们的位置交换
    #缺点:冒泡排序解决了桶排序浪费空间的问题,但是冒泡排序的效率特别低

    选择排序

    list=[1,4,6,5,2,3]
    # def sort(alist):
    #     length=len(alist)
    #     for j in range(length-1,0,-1):
    #         max_index= 0
    #         for i in range(1,j+1):
    #             if alist[max_index] < alist[i]:
    #                 max_index = i
    #                 print(alist[max_index] )
    #         alist[max_index], alist[j] = alist[j], alist[max_index]
    #
    # sort(list)
    # print(list)
    #总结:先从列表中,第一个值的后面必需都比他小,,这个位置的值就会与最后一个最小的值交换位置

    插入排序

    list=[1,4,6,5,2,3]
    # def sort(alist):
    #     length =len(alist)
    #     for j in range(1,length):
    #         i=j
    #         while i>0 :
    #             if alist[i] < alist[i - 1]:
    #                 alist[i], alist[i - 1] = alist[i - 1], alist[i]
    #                 i -= 1
    #                 print(list)
    #             else:
    #                 break
    # sort(list)
    # print(list)
    #结论:每回都是两个相邻的值对比,如果前面的值大于后面的值就交换,否则不交换,知道循环完

    快排

    def sort(alist,start,end):
        low = start
        high = end
        if low >= high:
            return
        mid = alist[low]
        while low < high:
            while low < high:
                if alist[high] >= mid:
                    high -= 1
                else:
                    alist[low] = alist[high]
                    break
    
            while low < high:
                if alist[low] < mid:
                    low += 1
                else:
                    alist[high] = alist[low]
                    break
    
        alist[low] = mid  ####
        #在mid左侧列表中递归调用该函数
        sort(alist,start,low-1)
        #mid右侧
        sort(alist,high+1,end)
    
    sort(list,0,len(list)-1)
    print(list)

      

  • 相关阅读:
    DevExpress.XtraReports报表,动态设置报表布局
    使datagridview的cell只能输入整数的方法
    关于昨天我那个问题:“DEV的DATAVIEW,能不能自己动计算并显示行中某个单元格值是其它单元格值相乘后得来的??”
    给dataGridView 添加合计行的实现方法
    实现textBox只能输入数字的一种方法!
    C#2005如何读取XML文件中的数据库连接字符串??? (好像和2003不一样啊) 急,跪求!
    请教各位在C#中这样的数据显示方式是用Datagrid控件生成的吗??(行和列数固定,能够显示行标头)
    C#2005用XML来保存连接数据库的字符串(这样改变了服务器连接配制只需改一下这个文件就成了),琢磨了几天终于有解了,和大家分享一下,希望高手指点!
    请教方法和例子:VS2003的datagrid控件,如何实现用鼠标拖动的方法选中任意区域的多个单元格,然后进行统一编辑??
    C#2005如何读取XML文件中的数据库连接字符串??? (好像和2003不一样啊) 急,跪求!
  • 原文地址:https://www.cnblogs.com/tianshuai1/p/11121723.html
Copyright © 2011-2022 走看看