数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。
1.规定了数据结构这一基本概念,可以规范后面各种数据的一些基本函数和作用
2.为了好看(其实更多的是规范性)
class Struct(): def __len__(self):pass def __contains__(self,item):pass def Clear(self):pass def IsNull(self):pass
len属性自然不必多说,数据结构是储存数据的,len可以内部获取数据量
contains实现于list的contains,也可以自己写搜索算法
Clear函数用于清空
IsNull判断是否为空
栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
import Struct class Stack(Struct.Struct): StackSpace=1024 def __init__(self): self.__index=-1 #整数,指针 self.__datas=[None]*Stack.StackSpace #数据池 def __len__(self): if(self.__index<0):return 0 else:return self.__index+1 def __contains__(self,item): return self.__datas.__contains__(item) def IsNull(self): return self.__index<0 def Clear(self): self.__index=-1 self.__datas.clear() def Push(self,obj): self.__index+=1 self.__datas[self.__index]=obj def Pop(self): if(self.__index==-1):return False else: data=self.__datas[self.__index] del(self.__datas[self.__index]) self.__index-=1 return data def Top(self): if(self.__index==-1):return None else:return self.__datas[self.__index]
1.Push函数用于压栈,而Python中list的特性注定了这个栈是个多类型的结构,对于压栈的数据是没有限制的,只不过初始StackSpace规定了栈的最大容量,事实上使用list.append来增加元素是一个更好的方案,但是StackSpace也起到了数据规范的作用
2.Pop函数用于退栈,并且返回退出的元素的值
3.Top函数用于获取栈顶元素
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。
import Struct class Queue(Struct.Struct): QueueSpace=1024 def __init__(self): self.__datas=[None]*Queue.QueueSpace self.__end=-1 def __len__(self): if(self.__end<0):return 0 else: return self.__end+1 def __contains__(self, item): return self.__datas.__contains__(item) def IsNull(self): return self.__end<0 def Clear(self): self.__datas=[None]*Queue.QueueSpace self.__end=-1 def Add(self,obj): self.__end+=1 self.__datas[self.__end]=obj def Delete(self): if(self.__end<0):return False data=self.__datas[0] del(self.__datas[0]) #删除该元素 self.__end-=1 #移动尾索引 return data def GetHead(self): if(self.__end<0):return None return self.__datas[0]
1.Add函数类似于Stack里面的Push函数,但是有区别的是Queue里面的增加数据和删除数据的数据节点是不同的
2.Delete函数类似于Stack里面的Pop函数,但观察代码可以发现,增加的元素在末尾,删除的元素在首,而储存排列就在内存中不断前进
3.GetHead函数获取首元素,因为Delete函数中使用了内置的del函数,所有调用Delete函数后,self.__data[0]就是后一个元素所在的位置了
树是一种数据结构,它是由n(n≥1)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:
每个节点有零个或多个子节点;没有父节点的节点称为根节点;每一个非根节点有且只有一个父节点;除了根节点外,每个子节点可以分为多个不相交的子树。
import Struct class TreeNode(Struct.Struct): def __init__(self, value, son): self.__son = [] self.__value = value for i in son: self.__son.append(i) def __len__(self): tmp = TreeNode.GetAllNode(self) return len(tmp) def __contains__(self, item): tmp = TreeNode.GetAllNode(self) return tmp.__contains__(item) def IsNull(self): return len(self.__son) == 0 def Clear(self): self.__son = [] def AddSon(self, obj): self.__son.append(obj) def DeleteSon(self, obj): self.__son.remove(obj) def GetSon(self): return self.__son def GetValue(self): return self.__value def GetFirstSon(self): if (len(self.__son) == 0): return None else: return self.__son[0] def GetLastSon(self): if (len(self.__son) == 0): return None else: return self.__son[len(self.__son) - 1] def GetAllNode(point): all = [] if (len(point.GetSon()) == 0): all.append(point) return all else: all.append(point) for i in point.GetSon(): for j in TreeNode.GetAllNode(i): all.append(j) return all def GetAllLeaf(point): all = [] if (len(point.GetSon()) == 0): all.append(point) return all else: for i in point.GetSon(): for j in TreeNode.GetAllLeaf(i): all.append(j) return all
1.AddSon函数调用时可以为该节点增加一个指定的子节点
2.GetSon函数用于获取该节点的所有子节点
3.GetValue函数用于获取该节点的权值
4.GetFirstSon函数用于获取添加的第一个子节点
5.GetLastSon函数用于获取添加的最后一个子节点
6.静态函数GetAllNode,递归获取所有的子节点
7.静态函数GetAllLeaf,递归获取所有的子叶节点
------更多内容持续更新中------