一个简单线性表关于分配空间的问题

woshiwuxingcheng 2011-04-02 12:28:51
L为一个线性表的头指针 当执行
linklist *p; p=L;的时候,有必要对p分配空间不 就是下面的操作
linklist *p=(linklist*)malloc(sizeof(LNode)); p=L;
...全文
115 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
shenjingbingzh 2011-04-02
  • 打赏
  • 举报
回复
是的 那是多余的
king__xy 2011-04-02
  • 打赏
  • 举报
回复
应该没有必要把,p只是指向了L,要分配内存也应该是分配给L
zyl072 2011-04-02
  • 打赏
  • 举报
回复
没有必要,这样做只是导致新申请的内存被立刻丢失, 就是所谓的内存泄漏。
数据结构:⼋⼤数据结构分析 数据结构分类 数据结构是指相互之间存在着⼀种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成 。 常⽤的数据结构有:数组,栈,链表,队列,树,图,堆,散列表等,如图所⽰: 线性表和⾮线性表 ⼀、线性表 常见的线性表有:数组、队列、栈、链表 线性表是最基本、最简单、也是最常⽤的⼀种数据结构。线性表(linear list)是数据结构的⼀种,线性表就是数据排列成⼀条先⼀样的结 构,每个线性表上的数据最多只有前和后两个⽅向。⼀个线性表是n个具有相同特性的数据元素的有限序列。 特点: 1. 集合中必存在唯⼀的⼀个"第⼀元素"。 2. 集合中必存在唯⼀的⼀个 "最后元素" 。 3. 除最后⼀个元素之外,均有唯⼀的后继(后件)。 4. 除第⼀个元素之外,均有唯⼀的前驱(前件)。 顺序表⾥⾯元素的地址是连续的;链表⾥⾯节点的地址不是连续的,是通过指针连起来的。 1.数组 数组是可以再内存中连续存储多个元素的结构,在内存中的分配也是连续的,数组中的元素通过数组下标进⾏访问,数组下标从0开始。例 如下⾯这段代码就是将数组的第⼀个元素赋值为 1。 int[] data = new int[100];data[0] = 1; 优点: 1、按照索引查询元素速度快 2、按照索引遍历数组⽅便 缺点: 1、数组的⼤⼩固定后就⽆法扩容了 2、数组只能存储⼀种类型的数据 3、添加,删除的操作慢,因为要移动其他的元素。 适⽤场景: 频繁查询,对存储空间要求不⼤,很少增加和删除的情况。 2.栈 栈是⼀种特殊的线性表,仅能在线性表的⼀端操作,栈顶允许操作,栈底不允许操作。 栈的特点是:先进后出,或者说是后进先出,从栈 顶放⼊元素的操作叫⼊栈,取出元素叫出栈。 栈的结构就像⼀个集装箱,越先放进去的东西越晚才能拿出来,所以,栈常应⽤于实现递归功能⽅⾯的场景,例如斐波那契数列。 3.队列 队列与栈⼀样,也是⼀种线性表,不同的是,队列可以在⼀端添加元素,在另⼀端取出元素,也就是:先进先出。从⼀端放⼊元素的操作称 为⼊队,取出元素为出队,⽰例图如下: 使⽤场景:因为队列先进先出的特点,在多线程阻塞队列管理中⾮常适 ⽤。 4.链表 链表是物理存储单元上⾮连续的、⾮顺序的存储结构,数据元素的逻辑顺序是通过链表的指针地址实现,每个元素包含两个结点,⼀个是存 储元素的数据域 (内存空间),另⼀个是指向下⼀个结点地址的指针域。根据指针的指向,链表能形成不同的结构,例如单链表,双向链表, 循环链表等。 链表的优点: 1. 链表是很常⽤的⼀种数据结构,不需要初始化容量,可以任意加减元素; 2. 添加或者删除元素时只需要改变前后两个元素结点的指针域指向地址即可,所以添加,删除很快; 缺点: 1. 因为含有⼤量的指针域,占⽤空间较⼤; 2. 查找元素需要遍历链表来查找,⾮常耗时。 适⽤场景: 数据量较⼩,需要频繁增加,删除操作的场景 ⼆、⾮线性表 常见的⾮线性表有:树、图、堆 ⾮线性表中数据并不是简单的前后关系。 1.树 树是⼀种数据结构,它是由n(n>=1)个有限节点组成⼀个具有层次关系的集合。把它叫做 "树" 是因为它看起来像⼀棵倒挂的树,也就 是说它是根朝上,⽽叶朝下的。它具有以下的特点: 每个节点有零个或多个⼦节点; 没有⽗节点的节点称为根节点; 每⼀个⾮根节点有且只有⼀个⽗节点; 除了根节点外,每个⼦节点可以分为多个不相交的⼦树; 在⽇常的应⽤中,我们讨论和⽤的更多的是树的其中⼀种结构,就是⼆叉树。 ⼆叉树是树的特殊⼀种,具有如下特点: 每个结点最多有两颗⼦树,结点的度最⼤为2。 左⼦树和右⼦树是有顺序的,次序不能颠倒。 即使某结点只有⼀个⼦树,也要区分左右⼦树。 ⼆叉树是⼀种⽐较有⽤的折中⽅案,它添加,删除元素都很快,并且在查找⽅⾯也有很多的算法优化,所以,⼆叉树既有链表的好处,也有 数组的好处,是两者的优化⽅案,在处理⼤批量的动态数据⽅⾯⾮常有⽤。 2.散列表 散列表,也叫哈希表,是根据关键码和值 (key和value) 直接进⾏访问的数据结构,通过key和value来映射到集合中的⼀个位置,这样就可 以很快找到集合中的对应元素。 记录的存储位置=f(key) 这⾥的对应关系 f 成为散列函数,⼜称为哈希 (hash函数),⽽散列表就是把Key通过哈希函数转换成⼀个整型数字,然后就将该数字对数 组长度进⾏取余,取余结果就当作数组的下标,将value存储在以该数字为下标的数组空间⾥,这块连续存储空间称为散列表或哈希表 (Hash table),这种存储空间可以充分利⽤数组的查找优势来查找元素,所以查找的速度很快。 散列数据结构的性能取决于以下三个因素: 哈希函数 哈希表的⼤⼩ 碰撞处理⽅法 哈希表在应⽤中也是⽐较常见的,就如Java中有些集合类
第1章 绪论 1.1 什么是数据结构 1.2 基本概念和术语 1.3 抽象数据类型的表现与实现 1.4 算法和算法分析 第2章 线性表 2.1 线性表的类型定义 2.2 线性表的顺序表示和实现 2.3 线性表的链式表示和实现 2.4 一元多项式的表示及相加 第3章 栈和队列 3.1 栈 3.2 栈的应有和举例 3.3 栈与递归的实现 3.4 队列 3.5 离散事件模拟 第4章 串 4.1 串类型的定义 4.2 串的表示和实现 4.3 串的模式匹配算法 4.4 串操作应用举例 第5章 数组和广义表 5.1 数组的定义 5.2 数组的顺序表现和实现 5.3 矩阵的压缩存储 5.4 广义表的定义 5.5 广义表的储存结构 5.6 m元多项式的表示 5.7 广义表的递归算法第6章 树和二叉树 6.1 树的定义和基本术语 6.2 二叉树 6.2.1 二叉树的定义 6.2.2 二叉树的性质 6.2.3 二叉树的存储结构 6.3 遍历二叉树和线索二叉树 6.3.1 遍历二叉树 6.3.2 线索二叉树 6.4 树和森林 6.4.1 树的存储结构 6.4.2 森林与二叉树的转换 6.4.3 树和森林的遍历 6.5 树与等价问题 6.6 赫夫曼树及其应用 6.6.1 最优二叉树(赫夫曼树) 6.6.2 赫夫曼编码 6.7 回溯法与树的遍历 6.8 树的计数 第7章 图 7.1 图的定义和术语 7.2 图的存储结构 7.2.1 数组表示法 7.2.2 邻接表 7.2.3 十字链表 7.2.4 邻接多重表 7.3 图的遍历 7.3.1 深度优先搜索 7.3.2 广度优先搜索 7.4 图的连通性问题 7.4.1 无向图的连通分量和生成树 7.4.2 有向图的强连通分量 7.4.3 最小生成树 7.4.4 关节点和重连通分量 7.5 有向无环图及其应用 7.5.1 拓扑排序 7.5.2 关键路径 7.6 最短路径 7.6.1 从某个源点到其余各顶点的最短路径 7.6.2 每一对顶点之间的最短路径 第8章 动态存储管理 8.1 概述 8.2 可利用空间表及分配方法 8.3 边界标识法 8.3.1 可利用空间表的结构 8.3.2 分配算法 8.3.3 回收算法 8.4 伙伴系统 8.4.1 可利用空间表的结构 8.4.2 分配算法 8.4.3 回收算法 8.5 无用单元收集 8.6 存储紧缩 第9章 查找 9.1 静态查找表 9.1.1 顺序表的查找 9.1.2 有序表的查找 9.1.3 静态树表的查找 9.1.4 索引顺序表的查找 9.2 动态查找表 9.2.1 二叉排序树和平衡二叉树 9.2.2 B树和B+树 9.2.3 键树 9.3 哈希表 9.3.1 什么是哈希表 9.3.2 哈希函数的构造方法 9.3.3 处理冲突的方法 9.3.4 哈希表的查找及其分析 第10章 内部排序 10.1 概述 10.2 插入排序 10.2.1 直接插入排序 10.2.2 其他插入排序 10.2.3 希尔排序 10.3 快速排序 10.4 选择排序 10.4.1 简单选择排序 10.4.2 树形选择排序 10.4.3 堆排序 10.5 归并排序 10.6 基数排序 10.6.1 多关键字的排序 10.6.2 链式基数排序 10.7 各种内部排序方法的比较讨论 第11章 外部排序 11.1 外存信息的存取 11.2 外部排序的方法 11.3 多路平衡归并的实现 11.4 置换一选择排序 11.5 最佳归并树 第12章 文件 12.1 有关文件的基本概念 12.2 顺序文件 12.3 索引文件 12.4 ISAM文件和VSAM文件 12.4.1 ISAM文件 12.4.2 VSAM文件 12.5 直接存取文件(散列文件) 12.6 多关键字文件 12.6.1 多重表文件 12.6.2 倒排文件 附录A 名词索引 附录B 函数索引 参考书目
数据结构在很多地方用的到,在计算机行业,很有用的 。 第1章 绪论  1.1 什么是数据结构  1.2 基本概念和术语  1.3 抽象数据类型的表现与实现  1.4 算法和算法分析 第2章 线性表  2.1 线性表的类型定义  2.2 线性表的顺序表示和实现  2.3 线性表的链式表示和实现  2.4 一元多项式的表示及相加 第3章 栈和队列  3.1 栈  3.2 栈的应有和举例  3.3 栈与递归的实现  3.4 队列  3.5 离散事件模拟 第4章 串  4.1 串类型的定义  4.2 串的表示和实现  4.3 串的模式匹配算法  4.4 串操作应用举例 第5章 数组和广义表  5.1 数组的定义  5.2 数组的顺序表现和实现  5.3 矩阵的压缩存储  5.4 广义表的定义  5.5 广义表的储存结构  5.6 m元多项式的表示  5.7 广义表的递归算法第6章 树和二叉树 6.1 树的定义和基本术语 6.2 二叉树   6.2.1 二叉树的定义   6.2.2 二叉树的性质   6.2.3 二叉树的存储结构  6.3 遍历二叉树和线索二叉树   6.3.1 遍历二叉树   6.3.2 线索二叉树  6.4 树和森林   6.4.1 树的存储结构   6.4.2 森林与二叉树的转换   6.4.3 树和森林的遍历  6.5 树与等价问题  6.6 赫夫曼树及其应用   6.6.1 最优二叉树(赫夫曼树)   6.6.2 赫夫曼编码  6.7 回溯法与树的遍历  6.8 树的计数 第7章 图  7.1 图的定义和术语  7.2 图的存储结构   7.2.1 数组表示法   7.2.2 邻接表   7.2.3 十字链表   7.2.4 邻接多重表  7.3 图的遍历   7.3.1 深度优先搜索   7.3.2 广度优先搜索  7.4 图的连通性问题   7.4.1 无向图的连通分量和生成树   7.4.2 有向图的强连通分量   7.4.3 最小生成树   7.4.4 关节点和重连通分量  7.5 有向无环图及其应用   7.5.1 拓扑排序   7.5.2 关键路径  7.6 最短路径   7.6.1 从某个源点到其余各顶点的最短路径   7.6.2 每一对顶点之间的最短路径 第8章 动态存储管理  8.1 概述  8.2 可利用空间表及分配方法  8.3 边界标识法   8.3.1 可利用空间表的结构   8.3.2 分配算法   8.3.3 回收算法  8.4 伙伴系统   8.4.1 可利用空间表的结构   8.4.2 分配算法   8.4.3 回收算法  8.5 无用单元收集  8.6 存储紧缩 第9章 查找  9.1 静态查找表   9.1.1 顺序表的查找   9.1.2 有序表的查找   9.1.3 静态树表的查找   9.1.4 索引顺序表的查找  9.2 动态查找表   9.2.1 二叉排序树和平衡二叉树   9.2.2 B树和B+树   9.2.3 键树  9.3 哈希表   9.3.1 什么是哈希表   9.3.2 哈希函数的构造方法   9.3.3 处理冲突的方法   9.3.4 哈希表的查找及其分析 第10章 内部排序  10.1 概述  10.2 插入排序   10.2.1 直接插入排序   10.2.2 其他插入排序   10.2.3 希尔排序  10.3 快速排序  10.4 选择排序   10.4.1 简单选择排序   10.4.2 树形选择排序   10.4.3 堆排序  10.5 归并排序  10.6 基数排序   10.6.1 多关键字的排序   10.6.2 链式基数排序  10.7 各种内部排序方法的比较讨论 第11章 外部排序  11.1 外存信息的存取  11.2 外部排序的方法  11.3 多路平衡归并的实现  11.4 置换一选择排序  11.5 最佳归并树 第12章 文件  12.1 有关文件的基本概念  12.2 顺序文件  12.3 索引文件  12.4 ISAM文件和VSAM文件   12.4.1 ISAM文件   12.4.2 VSAM文件  12.5 直接存取文件(散列文件)  12.6 多关键字文件   12.6.1 多重表文件   12.6.2 倒排文件

33,007

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧