zoukankan      html  css  js  c++  java
  • 数据结构

    线性列表

     1 #无序线性表(无序指的是没有顺序), 堆栈(受限的线性表)
     2 #线性列表属性的设置
     3 class Node:
     4     def __init__(self, initdata):
     5         self.data = initdata
     6         self.next = None
     7 
     8     def getData(self):
     9         return self.data
    10 
    11     def getNext(self):
    12         return self.next
    13 
    14     def setData(self, newdata):
    15         self.data = newdata
    16 
    17     def setNext(self, newnext):
    18         self.next = newnext
    19         #print(self.next)
    20 
    21 class UnorderedList:
    22 
    23     def __init__(self):
    24         self.head = None
    25 
    26     def isEmpty(self):
    27         return self.head is None
    28 
    29     def add(self, item):
    30         temp = Node(item)
    31         temp.setNext(self.head)
    32         self.head = temp
    33 
    34     def size(self):
    35         #每一个元素的head,只知道当前的head,如何知道下一个head,知道下一个元素get.next的head
    36         count=0
    37         current=self.head
    38         while current is not None:
    39             count+=1
    40             current=current.getNext()#什么数学原理,和求和很类似
    41         return count
    42 
    43     def search(self, item):
    44         #第一个  获取数值current=self.head , 出肉current.getData
    45         #下一个  current=current.getNext , current.getData
    46         #在下一个 current=current.getNext, current.getData
    47         current=self.head
    48         while current.getData() !=item:
    49             current=current.getNext()
    50             if current is None:
    51                 return False
    52         return True
    53 
    54 
    55     def remove(self, item):
    56         #要删除的元素的next赋给上一个元素的next,即可造成删除的假象
    57         #那么现在找出这个元素
    58         front_current=None
    59         current=self.head
    60         found=False
    61         while not found:
    62             if current.getData()!=item and current is not None:
    63                 front_current=current
    64                 current=front_current.getNext()
    65             else:
    66                 front_current.setNext(current.getNext())
    67                 return True
    68             if current is None:
    69                 found =True
    70         return False
    71 
    72 mylist = UnorderedList()
    73 mylist.add(13)
    74 mylist.add(122)
    75 mylist.add(333)
    76 mylist.add(234)
    77 mylist.add(124)
    78 
    79 print (mylist.size())
    80 print (mylist.search(333))
    81 print (mylist.remove(122))
    82 print (mylist.remove(1))
    83 print (mylist.size())#获取下一个对象

    栈的实现

    栈是一种特殊的列表,栈内的元素只能通过列表的一端访问,这一端称为栈顶。咖啡厅内的一摞盘子是现实世界中常见的栈的例子。只能从最上面取盘子,盘子洗净 后,也只能摞在这一摞盘子的最上面。栈被称为一种后入先出(LIFO,last-in-first-out)的数据结构。

    
    
     1 class Stack():
     2     def __init__(self):
     3         self.item=[]
     4 
     5     def push(self, x):
     6         self.item.append(x)
     7 
     8     def pop(self):
     9         if not self.item:
    10             return
    11         self.item.pop()
    12 
    13     def peek(self):
    14         if not self.item:
    15             return
    16         return self.item[len(self.item)-1]
    17 
    18     def size(self):
    19         return len(self.item)
    20 
    21     def isEmpty(self):
    22         return len(self.item) == 0
    23 
    24 
    25 s=Stack()
    26 s.push(2)
    27 s.push(3)
    28 s.pop()
    29 print (s.item)
    30 print (s.peek())
    31 print (s.size())
    32 print (s.isEmpty())

     

    队列的实现

    队列是一种列表,不同的是队列只能在队尾插入元素,在队首删除元素。队列用于存储按顺序排列的数据,先进先出,这点和栈不一样,在栈中,最后入栈的元素反 而被优先处理。可以将队列想象成在银行前排队的人群,排在最前面的人第一个办理业务,新来的人只能在后面排队,直到轮到他们为止。

     1 class Queue():
     2     def __init__(self):
     3         self.item=[]
     4 
     5     def dequeue(self):
     6         if not self.item:
     7             return
     8         return self.item.pop()
     9 
    10     def enqueue(self, x):
    11         self.item.insert(0, x)
    12 
    13     def isEmpty(self):
    14         return len(self.item) == 0
    15 
    16     def size(self):
    17         return len(self.item)
    18 
    19 q=Queue()
    20 q.enqueue(3)
    21 print (q.item)
    22 q.enqueue(4)
    23 print (q.item)
    24 q.dequeue()
    25 print (q.item)
    26 q.dequeue()
    27 print (q.item)
    28 q.dequeue()

    双端队列

    双端队列(Deque),是一种类似于队列的元素的有序集合。它拥有两端,队首和队尾,并且元素保持在当前的位置。双端队列的一个不同点就是,添加和删除元素的位置不受限制。

     1 class Deque():
     2     def __init__(self):
     3         self.item=[]
     4 
     5     def addFront(self, x):
     6         self.item.append(x)
     7 
     8     def addRear(self, x):
     9         self.item.insert(0, x)
    10 
    11     def removeFront(self):
    12         if not self.item:
    13             return
    14         self.item.pop()
    15 
    16     def removeRear(self):
    17         if not self.item:
    18             return
    19         self.item.pop(0)
    20 
    21     def isEmpty(self):
    22         return len(self.item) == 0
    23 
    24     def sieze(self):
    25         return len(self.item)
    26 
    27 d=Deque()
    28 d.addFront(2)
    29 print(d.item)
    30 d.addFront(3)
    31 print(d.item)
    32 d.addRear(4)
    33 print (d.item)
    34 d.removeFront()
    35 print (d.item)
    36 d.removeRear()
    37 print (d.item)
    38 d.removeFront()
    39 print (d.item)
  • 相关阅读:
    删除 AP 发票相关脚本
    js框架简明
    16 款最流行的 JavaScript 框架
    八款你不得不知的开源前端JS框架
    ExtJS面向对象
    js6类和对象
    js模拟类
    js实现继承
    Html中各种空格的显示
    常用快速原型设计工具大比拼、原型设计工具哪个好用
  • 原文地址:https://www.cnblogs.com/fengyunlsm/p/5819499.html
Copyright © 2011-2022 走看看