数据结构

线性列表

 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)

 

posted @ 2016-09-29 08:50  河边青青草  阅读(191)  评论(0编辑  收藏  举报