[数据结构与算法] 3,线性表

原创 2016年08月30日 19:40:59

1 线性表的定义

零个或多个数据元素的有限序列。序列指数据元素之间是有顺序的,若有多个元素,那么第一个元素无前驱,最后一个元素无后继。其它每个元素都有前驱后继


2 线性表的抽象数据类型

3 线性表的顺序存储结构

定义:用一段地址连续的存储单元依次存储线性表中的数据元素。(C语言中的一维数组)

顺序存储结构线性表的结构代码

三个重要的属性:

1) 存储空间的存储位置:数组data的存储位置

2)线性表的最大存储容量:MAXSIZE

3)线性表的当前长度:length

4 顺序存储结构下线性表的操作

1)取出操作 时间复杂度:O(1)


2)插入操作 时间复杂度:最坏O(n),平均时间复杂度也是一样


3) 删除操作 时间复杂度O(n),平均也是

5 线性顺序存储结构的优缺点

6 线性表的链式存储结构

头节点:为了操作方便,在第一个节点前增加一个头节点,数据域可以不存储任何信息,也可以放一些公共信息,如下图:

头节点跟头指针的区别:


C语言结构指针描述单链表的:


7 单链表的操作

1)读取操作: 时间复杂度:O(n)


2)插入操作:代码顺序不可相反,可以想想为什么


3)删除操作:



8,单链表结构跟顺序存储结构优缺点

如果线性表需要频繁查找,很少进行插入删除操作,那么适合用顺序存储结构,如果需要频繁插入删除操作,那么适合用链式存储结构,单链表。

比如在游戏开发中,用户注册的信息,除了用户注册外,其余时候我们都是读取,所以应该考虑顺序存储结构。

比如玩家的装备总是在变化,可能增加或者删除,那么适合用单链表。实际情况往往复杂很多。


9,循环链表

将单链表的终端节点的NULL指针改为指向头节点或者开始节点,这就使得整个单链表形成一个环,这种头尾相连的链表称为循环链表(circular linked list)

那么,循环链表判断循环结束的标志就是p->next等于头节点或者开始节点,则循环结束。

10,双向链表(double linked list)

双向链表就是多设置了一个指向前驱节点的指针。

双向链表的插入操作:

删除操作:


11,总结




























版权声明:本文为博主原创文章,未经博主允许不得转载。

我的软考之路(三)——数据结构与算法(1)之线性

数据结构与算法是程序设计的两大基础,大型的IT企业面试时也会出数据结构和算法的题目,它可以说明你是否有良好的逻辑思维,如果你具备良好的逻辑思维,即使技术存在某些缺陷,面试公司也会认为你很有培养价值,至...
  • jiuqiyuliang
  • jiuqiyuliang
  • 2014年04月18日 07:11
  • 9297

数据结构算法代码实现——线性表的顺序表示与实现(二)

线性表的顺序表示 线性表的顺序表示:指的是一组地址连续的存储单元依次存储线性表的数据元素。 顺序表的存储方法与特点 在日常生活中,我们通常更喜欢使用连续的存储空间来存放各种物品。 ...
  • hou1620089770
  • hou1620089770
  • 2015年05月28日 20:28
  • 4500

数据结构与算法-线性表的定义与特点

1.线性表概念   线性表是由零个或者多个数据元素组成的有序的序列。 图示: 2.特点 2.1 有序 我们可以从上图看见,线性表里面的元素是一个挨着一个顺序排下去的,就像平常小朋友排...
  • raylee2007
  • raylee2007
  • 2015年07月28日 15:39
  • 1831

算法与数据结构--实现线性表的插入操作--算法2.3

/* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved. * 文件名称:实现线...
  • leihengxin
  • leihengxin
  • 2012年09月16日 18:21
  • 3045

java数据结构与算法-线性表与链表(2)

上一会我们讲到了在java中线性表和链表的创建,数据的添加和删除所消耗的代价。...
  • u013930163
  • u013930163
  • 2015年05月11日 12:44
  • 578

严蔚敏版《数据结构》第二章线性表的算法C语言实现

首先,今天是中秋,明天是国庆,在这说声节日快乐啊。 说点题外话,今天出去走了走,看到药店就进去称体重了。尼玛,竟然轻了4斤,本来就是100刚出头,现在倒好,直接掉下100了。我想这可能是因为最近天天...
  • ruralboy1
  • ruralboy1
  • 2012年09月30日 13:22
  • 6179

数据结构之两个线性表的合并

严蔚敏版的教材,算法2.2,下面是代码实现。。。。 #include using namespace std; typedef int element; #define maxsize 100...
  • wmn_wmn
  • wmn_wmn
  • 2011年08月30日 17:22
  • 6301

我的软考之路(四)——数据结构与算法(2)之树与二叉树

上篇博文主要介绍的是数据结构的线性结构,我们这篇博文介绍非线性结构—树与二叉树,我先介绍树的一些基本概念,树的遍历,再介绍二叉树相关概念和特性,以及二叉树的遍历,最后再树与二叉树的对比,总结。    ...
  • jiuqiyuliang
  • jiuqiyuliang
  • 2014年04月25日 08:16
  • 9690

《数据结构》一般线性表的合并

一般线性表的合并 算法思想: 遍历表A和表B,查看B的每一个元素是否在A中,若不在,将B的该元素插入到A的表尾,A表的表长+1。 算法的时间复杂度和A、B的长度有关,O(m*n). //合并 void...
  • sungaochao
  • sungaochao
  • 2016年03月05日 18:11
  • 1556

数据结构_线性表_顺序表 的创建,插入,删除,查找

首先要了解顺序结构,顺序机构就是将表中元素一个接一个的存入一组连续的存储单元中,这种存储结构是顺序结构。 其次要了解线性表的线性 线性表是最基本、最简单、也是最常用的一种数据结构。 线性表中数据...
  • lcg910978041
  • lcg910978041
  • 2016年05月04日 21:13
  • 1835
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[数据结构与算法] 3,线性表
举报原因:
原因补充:

(最多只允许输入30个字)