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)