小白学数据结构——一、线性结构(数组&链表)
来源:互联网 发布:cf东东数据一键刷枪 编辑:程序博客网 时间:2024/05/21 05:22
数组
数组是应用最广泛的一种数据结构,常常被植入到编程语言中,作为基本数据类型使用,因此,在一些教材中,数组并没有被当做一种数据结构单独拿出来讲解(其实数组就是一段连续的内存,即使在物理内存中不是连续的,在逻辑上肯定是连续的)。其实没必要在概念上做纠缠,数组可以当做学习数据结构的敲门砖,以此为基础,了解数据结构的基本概念以及构建方法
数据结构不仅是数据的容器,还要提供对数据的操作方法,比如检索、插入、删除、排序等
链表
链表顾名思义就是~链 链表是一种动态数据结构,他的特点是用一组任意的存储单元存放数据元素。链表中每一个元素成为“结点”,每一个结点都是由数据域和指针域组成的。跟数组不同链表不用预先定义大小,而且硬件支持的话可以无限扩展。
链表与数组的不同点:
数组需要预先定义大小,无法适应数据动态地增减,数据小于定义的长度会浪费内存,数据超过预定义的长度无法插入。而链表是动态增删数据,可以随意增加。
数组适用于获取元素的操作,直接get索引即可,链表对于获取元素比较麻烦需要从头一直寻找,但是适用与增删,直接修改节点的指向即可,但是对于数组就比较麻烦了,例如[1,2,3,4]需要在下标为1的位置插入-2,则需要将[2,3,4]后移,赋值ls[1]=-2
数组从栈中分配空间, 对于程序员方便快速,但自由度小。链表从堆中分配空间, 自由度大但申请管理比较麻烦.
链表支持的基本操作
1.初始化
2.获取链表长度
3.追加节点
4.设置节点
5.删除节点
6.反转链表
7.清空链表
单链表和双链表的区别
- 结构
删除操作
添加操作
注:链表的head中不作为链表中一个确切的元素,这样可以方便操作(插入,删除等)
实现
单链表的Py3实现
# -*- coding: utf-8 -*-class Node(object): def __init__(self,data): self.data=data self.next=Noneclass SingleLinkedList(object): '''初始化链表''' def __init__(self): self.head=Node(None) '''链表增加元素''' def append(self,data): node=Node(data) pre=self.head while pre.next: pre=pre.next pre.next=node '''打印链表''' def show(self): pre=self.head.next while pre: print(pre.data,end=' ') pre=pre.next print() ''''获取链表长度''' def __len__(self): length=0 pre=self.head.next while pre: length+=1 pre=pre.next return length '''插入元素''' def insert(self,index,data): '''index转换''' ''' 插入的时候方便操作 如有 1 2 3 4 链表 插入-2位置相当于插入到index=4的位置 插入-3位置相当于插入到index=3的位置 ''' if index<0: index=len(self)+2-abs(index) if (index>len(self)+1): return False node=Node(data) pre = self.head while index-2>=0: pre=pre.next index-=1 temp=pre.next pre.next=node node.next=temp ''''删除元素''' def delete(self,index): ''' index转换 这里是len(self)+1-abs(index) 和insert不同 ''' if index<0: index=len(self)+1-abs(index) pre = self.head while index-2>=0: pre=pre.next index-=1 temp=pre.next pre.next=temp.next '''获取节点''' def get(self,index): ''' index转换 这里是len(self)+1-abs(index) 和insert不同 ''' if index<0: index=len(self)+1-abs(index) if(index>len(self)): print('index error for get') return pre = self.head while index>0: pre=pre.next index-=1 print(pre.data)sl=SingleLinkedList()sl.append(1)sl.append(2)sl.append(3)sl.show()sl.insert(4,5)sl.show()sl.insert(-2,10)sl.show()sl.delete(2)sl.show()sl.delete(-2)sl.show()sl.get(-2)
双链表的Py3实现
参考文献
http://www.cnblogs.com/skywang12345/p/3561803.html
- 小白学数据结构——一、线性结构(数组&链表)
- 【数据结构】数据结构与算法(一)——线性结构
- 数据结构复习——线性表(一)数组
- 小白学数据结构——一、线性结构(栈和队列)
- [数据结构]线性结构——线性表
- 数据结构——线性结构
- 数据结构——线性结构(8)——动态数组与Vector
- 数据结构 线性结构中的数组
- 数据结构之线性结构--数组
- 面试准备--数据结构与算法(一)--线性结构--数组、单链表、双链表
- 大话数据结构(一)——线性表顺序存储结构的java实现
- 数据结构——线性表(一)
- 数据结构之线性结构(一,表结构)
- 数据结构之线性结构(一,表结构)
- 数据结构之线性结构(二,联合数组等)
- 数据结构之线性结构(二,联合数组等)
- 线性结构————数据结构
- 数据结构——第二讲、线性结构(1)
- 近年推荐系统论文调查汇总
- HDOJ 1405 The Last Practice
- C语言进阶-第15~16讲:结构体应用(玩转日期和时间)
- while(满足条件后再执行)
- visual studio 2012打开提示 未能将网站×××配置为使用 ASP.NET 4.5 和 尚未在Web服务器上注册,您需要手动将Web服务器配置为使用ASP.NET 4.5,问题解决
- 小白学数据结构——一、线性结构(数组&链表)
- golang基础-浏览器访问服务器、客户端访问服务器(延迟处理)、表单回写并提交、panic处理
- Recycleview点击事件
- python sys模块常用方法
- 【1701H1】【穆晨】【171112】连续第三十三天总结
- 火车票购票系统模拟
- 电子组装的可制造性设计技术-2
- LTP分词与词性标注(使用用户词典)
- 编程计算并输出1到n之间的所有数的平方和立方