PS:资料来源慕课网视频。

一、什么是线性表

线性表是n个数据元素的有限序列。

分类:

二、补充知识点

1、栈和队列有出操作、入操作,对应线性表(数组)为插入元素和删除元素,而线性表中要获取指定元素值可直接使用getelem()函数,获取后并不删除元素,可重复获取。

【与只能使用一次的栈、队列有区别】

2、顺序表:遍历和寻址非常快,插入、删除效率低。

3、《链表算法说明》课程评论:静态链表基于数组,动态链表基于结构体,所以线性表中的链表也有顺序存储结构

4、《链表编码实战一》课程笔记:

单链表中第一个节点的数据域是没有意义的!!!因为这是一个哨兵节点,没有别的指针指向这个头节点的数据域。并且头节点并不算在链表的长度当中!

5、《链表编码实战一》课程笔记:

初始化的过程是建立头结点,而且与顺序表不同的是,链表的表长size是不需要预先定义的,因为他可以从堆中临时申请,这点与顺序表有很大的不同。

按通用的做法,指向头结点的指针(即头指针)是固定的,头结点是不固定的,头结点不放元素,只放链表第一个结点的地址。

如果新插入或者删除的元素不是链表的第一个带元素的结点,或者这个位置的结点,头结点就是固定的。

如果新插入一个结点到头结点的下一个结点,或者删除头结点的下一个结点,头结点中存放的指针就变了,头结点也就变了。

6、《链表编码实战三》课程笔记:

哨兵节点(sentinel)是一个哑元节点(dummy node),可以简化边界条件。是一个附加的链表节点,该节点作为第一个节点,它的值域中并不存储任何东西,

只是为了操作的方便而引入的。如果一个链表有哨兵节点的话,那么线性表的第一个元素应该是链表的第二个节点。

7、《链表编码实战四》课程笔记:

单链表是有表头结点的,表头结点并不存储数据,只是一个牵头作用,方便我们通过它来寻找到链表的其他所有元素。

因此单链表的元素个数也不把它包括在内,第0个结点就是表头结点的下一个结点。

三、应用实例-通讯录

  1. #include <stdlib.h>
  2. #include <iostream>
  3. #include <string>
  4. #include "List.h"
  5. #include "NodeList.h"
  6. using namespace std;
  7.  
  8. int menu();
  9. void newPerson(NodeList *p);
  10. void deletePerson(NodeList *p);
  11.  
  12. void main ( )
  13. {
  14. int userorder=;
  15. NodeList p;
  16.  
  17. while(userorder!=)
  18. {
  19. userorder=menu();
  20. switch(userorder)
  21. {
  22. case :
  23. cout<<"用户指令-----新建联系人"<<endl;
  24. newPerson(&p);
  25. break;
  26. case :
  27. cout<<"用户指令-----删除联系人"<<endl;
  28. deletePerson(&p);
  29. break;
  30. case :
  31. cout<<"用户指令-----浏览通信录"<<endl;
  32. p.listTraverse();
  33. break;
  34. case :
  35. cout<<"用户指令-----退出通信录"<<endl;
  36. break;
  37. default:
  38. break;
  39. }
  40. }
  41.  
  42. system("pause");
  43.  
  44. }
  45.  
  46. int menu()
  47. {
  48. cout<<"功能菜单"<<endl;
  49. cout<<"1.新建联系人"<<endl;
  50. cout<<"2.删除联系人"<<endl;
  51. cout<<"3.浏览通信录"<<endl;
  52. cout<<"4.退出通信录"<<endl;
  53. cout<<"请输入:";
  54. int order;
  55. cin>>order;
  56. return order;
  57. }
  58.  
  59. void newPerson(NodeList *p)
  60. {
  61. Node node;
  62. cout<<"请输入姓名:"<<endl;
  63. cin>>node.data.m_strName;
  64. cout<<"请输入电话号码:"<<endl;
  65. cin>>node.data.m_strCode;
  66. p->listInsertTail(&node);
  67. }
  68.  
  69. void deletePerson(NodeList *p)
  70. {
  71. Node node;
  72. cout<<"请输入姓名:"<<endl;
  73. cin>>node.data.m_strName;
  74. cout<<"请输入电话号码:"<<endl;
  75. cin>>node.data.m_strCode;
  76.  
  77. int temp;
  78. temp=p->locateElem(&node);
  79. if (temp==-)
  80. {
  81. cout<<"该联系人不存在"<<endl;
  82. return;
  83. }
  84. Node t;
  85. p->listDelete(temp,&t);
  86. cout<<"成功删除联系人"<<endl;
  87. }

数据结构C++版-线性表的更多相关文章

  1. 【C#数据结构系列】线性表

    一:线性表 1.1:定义:零个或多个数据元素的有限序列 1.2: 线性表元素个数n定义为线性表的长度,n = 0称为空表,i 为数据元素ai在线性表中的位序. 1.3:满足线性表的条件:(1):有序, ...

  2. 【算法与数据结构实战】线性表操作-实现A并B,结果放入A中

    //数据结构与算法基础题1:线性表操作,实现A并B,结果放入A中 #include "stdafx.h" #include <iostream> #include &l ...

  3. PHP数据结构之二 线性表中的顺序表的PHP实现

    线性表 (一)基本特点:最基本.最简单.最常用的一种数据结构 在这种结构中: 1.存在一个唯一的被称为“第一个”的数据元素: 2.存在一个唯一的被称为“最后一个”的数据元素: 3.除第一个元素外,每个 ...

  4. C语言数据结构——第二章 线性表

    二.线性表 2.1-线性表简介 2.1.1-线性表的定义 线性表是由若干个相同特性的数据元素组成的有限序列.若该线性表不包含任何元素,则称为空表,此时长度为0,当线性表不为空时,表中的元素的个数就是线 ...

  5. C++ 数据结构 1:线性表

    1 数据结构 1.1 数据结构中基本概念 数据:程序的操作对象,用于描述客观事物. 数据的特点: 可以输入到计算机 可以被计算机程序处理 数据是一个抽象的概念,将其进行分类后得到程序设计语言中的类型. ...

  6. JAVA中的数据结构——集合类(线性表:Vector、Stack、LinkedList、set接口;键值对:Hashtable、Map接口<HashMap类、TreeMap类>)

    Java的集合可以分为两种,第一种是以数组为代表的线性表,基类是Collection:第二种是以Hashtable为代表的键值对. ... 线性表,基类是Collection: 数组类: person ...

  7. c语言数据结构学习心得——线性表

    线性表:具有相同数据类型的n(n>0)个数据元素的有限序列. 主要有顺序存储和链式存储. 顺序存储: 特点:地址连续,随机/存取,顺序存储. 建立:首地址/存储空间大小(数组),表长. 方式:静 ...

  8. 数据结构导论 四 线性表的顺序存储VS链式存储

    前几章已经介绍到了顺序存储.链式存储 顺序存储:初始化.插入.删除.定位 链式存储:初始化.插入.删除.定位 顺序存储:初始化 strudt student{ int ID://ID char nam ...

  9. 基于c语言数据结构+严蔚敏——线性表章节源码,利用Codeblocks编译通过

    白天没屌事,那我们就来玩玩线性表的实现吧,快要失业了,没饭吃了咋整哦 题目描述假设利用两个线性表LA和LB分别表示两个集合A和B(即:线性表中的数据元素即为集合中的成员),现要求一个新的集合A=A∪B ...

随机推荐

  1. 自定义solr域中的配置

    <!-- IKAnalyzer--> <fieldType name="text_ik" class="solr.TextField"> ...

  2. 牛客 某练习赛 Data Structure

    Data Structure 题目描述 将一个非负整数序列划分为 \(K\) 段,分别计算出各段中的整数按位或的结果,然后再把这些结果按位与起来得到一个最终结果,把这个最终结果定义为这个序列的一个 \ ...

  3. mac os 下安装mysql

    在 http://dev.mysql.com/downloads/mysql/ 选择下载mysql 注册并选择相应的版本后,得到下载链接:: wget http://dev.mysql.com/get ...

  4. VC内联汇编,引用程序中的变量

    int a=5; //变量a _asm { mov eax,a;       //将变量a的值放入寄存器eax add eax,eax;   //相当于a=a+a mov a,eax;      // ...

  5. flutter 使用keyboard_actions 关闭ios键盘

    项目中登录 输入账号密码 弹出的键盘 关闭不了,从而 引来一些问题, 1,第一次关闭 项目是在 最外层包裹一层,点击的时候进行关闭, return Scaffold( resizeToAvoidBot ...

  6. Jeecg 3.8修改lhgDialog弹窗的样式

    位置:F:\jeecg-bpm-3.8\eecg-bpm-3.8-master\jeecg-bpm-3.8\src\main\java\org\jeecgframework\core\util pub ...

  7. QinQ 技术解析

    目录 1. 概述 2. QinQ 的产生背景 3. QinQ的作用及原理 4. QinQ 技术的优点 5. QinQ 的报文结构 6. QinQ的实现方式 (1) 基本QinQ (2) 灵活QinQ ...

  8. 2、使用siege进行服务端性能测试

    先查看siege帮助 输入siege -h 翻译一下常用命令 -c 指定并发数 -r 指定重复次数 -d 指定请求的延迟时间,注意每个请求间随机延迟 -f 指定url列表,可以一次给多个地址加压 -t ...

  9. Haskell语法

    http://www.ibm.com/developerworks/cn/java/j-cb07186.html 1. 构造符号 : 比如: 1:2:3:[] 而常用的 [1,2,3] 是一种语法糖( ...

  10. 【三】Jmeter接口自动化测试系列之Http接口自动化实战

    作者:大虫 本文介绍 Jmeter 工具的 http 接口 自动化测试 实战! 为了通用性,就拿知乎 网站作为实战例子吧! 必备技能:http接口基础知识.抓包,本文不做详细介绍,不会的可以先百度恶补 ...