对数据进行存储和运算。首先咱们须要知道咱们目前使用的计算机都是二进制的计算机,就觉得着计算机只能够存储和运算二进制的数据。例以下载好的一部电影,该电影能够存储到计算机中,计算机中存储的是基于二进制的电影数据,而后咱们能够经过相关的视频播放软件结合相关的硬件对电影的二进制数据进行相关的运算操做,所产生的结果就是咱们能够看到电影的画面和听到音频的声音。node
- 阐述:简单理解为,首先能够将1和2输入到计算机中,而后计算机会将1和2转换成二进制的数据进行数据存储,而后经过加法器进行两个二进制数值的计算并返回结果。编程
- 分析:上述的阐述中提到,计算机首先须要存储1和2这两个数值,那么计算机如何进行数据的存储呢?那么毫无疑问,计算机能够将数据直接存储到内存中。数据结构
- 变量:咱们在编程世界中,能够将某个数值直接赋值给一个变量,可是最终数值会被存储到计算机的内存中,所以咱们能够理解为,变量表示的就是计算机中进行数据存储的某一块内存。app
- 如何形象化的理解计算机的内存?spa
- 举例:将计算机的内存空间映射到咱们现实生活中的话,内存就比如是咱们在现实生活中三维立体的空间。生活在北京的北漂们,几乎都居住的是一个独立的公寓或者合租在一个几居室的某一个房间中,那么北漂甲就比如是数据,而他所居住的房间则就是存储数据的一块内存空间。code
- 分析:从上述案例中,咱们能够得知北漂甲居住的房间会有两个基本的属性,其一就是房间空间的大小,其二就是房间的一个位置标识(门牌号)。那么计算机中存储数据的内存空间也会有这两个最基本的属性:内存空间大小和内存空间的地址。内存空间的大小能够表示该空间能够存储数据值的大小范围,内存空间的地址(用十六进制数值表示)能够用来经过寻址定位、查找到该内存空间中所存储的数据值。视频
- 如何理解 a = 10 这条赋值语句对应的内存图呢?对象
- 引用:当一个变量中存储的是某一块内存空间的地址,则该变量便可成为那块内存空间的引用。a=10,a就是10所在内存空间的一个引用。blog
- 指向:当一个变量中存储了一块内存空间的地址,则称该变量(引用)指向了那块内存。ip
- 不一样类型数据占用内存空间的大小:整形(4字节),浮点型(8字节),字符型(1字节)
集合中存储的元素是有顺序的。顺序表的结构能够分为两种形式:单数据类型和多数据类型。
在内存中如何存储 int a = 10,20,30,如何取得每个数据值呢?
单数据类型顺序表的内存图(内存连续开启)
相对于顺序表,链表结构能够充分利用计算机内存空间,实现灵活的内存动态管理且进行扩充时不须要进行数据搬迁
单向链表也叫单链表,是表中最简单的一种形式,它的每一个节点包含两个域,一个信息域(元素域)和一个连接域。这个连接指向链表中的下一个节点,而最后一个节点的连接域则指向一个空值。
#封装节点数据结构 class Node(): def __init__(self,item): #存放链表中的元素 self.item = item #存放下一个节点 self.next = None def __str__(self): return self.item #封装链表数据结构 class Link(): #初始化一个空列表 def __init__(self): #该属性永远指向第一个节点 self._head = None def isEmpty(self): return self._head == None def add(self,item): #建立一个新的节点对象 node = Node(item) #将节点插入到链表的头部,指向旧节点 node.next =self._head #指向新节点 self._head = node def travel(self): #cur等于第一个节点 cur = self._head #若是cur不等于空则继续循环 while cur: print(cur.item) #此时cur等于下一个节点地址 cur = cur.next def length(self): count = 0 cur =self._head while cur: count +=1 cur = cur.next return count def append(self,item): cur = self._head #pre 表示cur前面节点的地址 pre = None node = Node(item) #若是链表为空则新节点做为链表中的第一个节点 if self._head is None: self._head =node return #链表非空对应的插入状况 while cur: pre = cur cur = cur.next pre.next = node def insert(self,pos,item): cur = self._head pre = None node = Node(item) length = self.length() #对特殊状况的处理 if pos >length: self.append(item) return if pos <=0: self.add(item) return #正常处理 for i in range(pos): pre = cur cur = cur.next pre.next = node node.next = cur def remove(self,item): cur = self._head pre = None #若是删除的是第一个节点 if item == cur.item: self._head = cur.next return while cur: if cur.item == item: pre.next = cur.next return else: pre = cur cur = cur.next def search(self,item): find = False cur = self._head while cur: if cur.item == item: find = True break cur = cur.next return find link = Link() link.add(10) link.add("aa") link.append('wl') link.insert(11,666) link.travel() print(link.length())