数据结构C++版-线性表
PS:资料来源慕课网视频。
一、什么是线性表
线性表是n个数据元素的有限序列。
分类:
二、补充知识点
1、栈和队列有出操作、入操作,对应线性表(数组)为插入元素和删除元素,而线性表中要获取指定元素值可直接使用getelem()函数,获取后并不删除元素,可重复获取。
【与只能使用一次的栈、队列有区别】
2、顺序表:遍历和寻址非常快,插入、删除效率低。
3、《链表算法说明》课程评论:静态链表基于数组,动态链表基于结构体,所以线性表中的链表也有顺序存储结构
4、《链表编码实战一》课程笔记:
单链表中第一个节点的数据域是没有意义的!!!因为这是一个哨兵节点,没有别的指针指向这个头节点的数据域。并且头节点并不算在链表的长度当中!
5、《链表编码实战一》课程笔记:
初始化的过程是建立头结点,而且与顺序表不同的是,链表的表长size是不需要预先定义的,因为他可以从堆中临时申请,这点与顺序表有很大的不同。
按通用的做法,指向头结点的指针(即头指针)是固定的,头结点是不固定的,头结点不放元素,只放链表第一个结点的地址。
如果新插入或者删除的元素不是链表的第一个带元素的结点,或者这个位置的结点,头结点就是固定的。
如果新插入一个结点到头结点的下一个结点,或者删除头结点的下一个结点,头结点中存放的指针就变了,头结点也就变了。
6、《链表编码实战三》课程笔记:
哨兵节点(sentinel)是一个哑元节点(dummy node),可以简化边界条件。是一个附加的链表节点,该节点作为第一个节点,它的值域中并不存储任何东西,
只是为了操作的方便而引入的。如果一个链表有哨兵节点的话,那么线性表的第一个元素应该是链表的第二个节点。
7、《链表编码实战四》课程笔记:
单链表是有表头结点的,表头结点并不存储数据,只是一个牵头作用,方便我们通过它来寻找到链表的其他所有元素。
因此单链表的元素个数也不把它包括在内,第0个结点就是表头结点的下一个结点。
三、应用实例-通讯录
- #include <stdlib.h>
- #include <iostream>
- #include <string>
- #include "List.h"
- #include "NodeList.h"
- using namespace std;
- int menu();
- void newPerson(NodeList *p);
- void deletePerson(NodeList *p);
- void main ( )
- {
- int userorder=;
- NodeList p;
- while(userorder!=)
- {
- userorder=menu();
- switch(userorder)
- {
- case :
- cout<<"用户指令-----新建联系人"<<endl;
- newPerson(&p);
- break;
- case :
- cout<<"用户指令-----删除联系人"<<endl;
- deletePerson(&p);
- break;
- case :
- cout<<"用户指令-----浏览通信录"<<endl;
- p.listTraverse();
- break;
- case :
- cout<<"用户指令-----退出通信录"<<endl;
- break;
- default:
- break;
- }
- }
- system("pause");
- }
- int menu()
- {
- cout<<"功能菜单"<<endl;
- cout<<"1.新建联系人"<<endl;
- cout<<"2.删除联系人"<<endl;
- cout<<"3.浏览通信录"<<endl;
- cout<<"4.退出通信录"<<endl;
- cout<<"请输入:";
- int order;
- cin>>order;
- return order;
- }
- void newPerson(NodeList *p)
- {
- Node node;
- cout<<"请输入姓名:"<<endl;
- cin>>node.data.m_strName;
- cout<<"请输入电话号码:"<<endl;
- cin>>node.data.m_strCode;
- p->listInsertTail(&node);
- }
- void deletePerson(NodeList *p)
- {
- Node node;
- cout<<"请输入姓名:"<<endl;
- cin>>node.data.m_strName;
- cout<<"请输入电话号码:"<<endl;
- cin>>node.data.m_strCode;
- int temp;
- temp=p->locateElem(&node);
- if (temp==-)
- {
- cout<<"该联系人不存在"<<endl;
- return;
- }
- Node t;
- p->listDelete(temp,&t);
- cout<<"成功删除联系人"<<endl;
- }
数据结构C++版-线性表的更多相关文章
- 【C#数据结构系列】线性表
一:线性表 1.1:定义:零个或多个数据元素的有限序列 1.2: 线性表元素个数n定义为线性表的长度,n = 0称为空表,i 为数据元素ai在线性表中的位序. 1.3:满足线性表的条件:(1):有序, ...
- 【算法与数据结构实战】线性表操作-实现A并B,结果放入A中
//数据结构与算法基础题1:线性表操作,实现A并B,结果放入A中 #include "stdafx.h" #include <iostream> #include &l ...
- PHP数据结构之二 线性表中的顺序表的PHP实现
线性表 (一)基本特点:最基本.最简单.最常用的一种数据结构 在这种结构中: 1.存在一个唯一的被称为“第一个”的数据元素: 2.存在一个唯一的被称为“最后一个”的数据元素: 3.除第一个元素外,每个 ...
- C语言数据结构——第二章 线性表
二.线性表 2.1-线性表简介 2.1.1-线性表的定义 线性表是由若干个相同特性的数据元素组成的有限序列.若该线性表不包含任何元素,则称为空表,此时长度为0,当线性表不为空时,表中的元素的个数就是线 ...
- C++ 数据结构 1:线性表
1 数据结构 1.1 数据结构中基本概念 数据:程序的操作对象,用于描述客观事物. 数据的特点: 可以输入到计算机 可以被计算机程序处理 数据是一个抽象的概念,将其进行分类后得到程序设计语言中的类型. ...
- JAVA中的数据结构——集合类(线性表:Vector、Stack、LinkedList、set接口;键值对:Hashtable、Map接口<HashMap类、TreeMap类>)
Java的集合可以分为两种,第一种是以数组为代表的线性表,基类是Collection:第二种是以Hashtable为代表的键值对. ... 线性表,基类是Collection: 数组类: person ...
- c语言数据结构学习心得——线性表
线性表:具有相同数据类型的n(n>0)个数据元素的有限序列. 主要有顺序存储和链式存储. 顺序存储: 特点:地址连续,随机/存取,顺序存储. 建立:首地址/存储空间大小(数组),表长. 方式:静 ...
- 数据结构导论 四 线性表的顺序存储VS链式存储
前几章已经介绍到了顺序存储.链式存储 顺序存储:初始化.插入.删除.定位 链式存储:初始化.插入.删除.定位 顺序存储:初始化 strudt student{ int ID://ID char nam ...
- 基于c语言数据结构+严蔚敏——线性表章节源码,利用Codeblocks编译通过
白天没屌事,那我们就来玩玩线性表的实现吧,快要失业了,没饭吃了咋整哦 题目描述假设利用两个线性表LA和LB分别表示两个集合A和B(即:线性表中的数据元素即为集合中的成员),现要求一个新的集合A=A∪B ...
随机推荐
- 自定义solr域中的配置
<!-- IKAnalyzer--> <fieldType name="text_ik" class="solr.TextField"> ...
- 牛客 某练习赛 Data Structure
Data Structure 题目描述 将一个非负整数序列划分为 \(K\) 段,分别计算出各段中的整数按位或的结果,然后再把这些结果按位与起来得到一个最终结果,把这个最终结果定义为这个序列的一个 \ ...
- mac os 下安装mysql
在 http://dev.mysql.com/downloads/mysql/ 选择下载mysql 注册并选择相应的版本后,得到下载链接:: wget http://dev.mysql.com/get ...
- VC内联汇编,引用程序中的变量
int a=5; //变量a _asm { mov eax,a; //将变量a的值放入寄存器eax add eax,eax; //相当于a=a+a mov a,eax; // ...
- flutter 使用keyboard_actions 关闭ios键盘
项目中登录 输入账号密码 弹出的键盘 关闭不了,从而 引来一些问题, 1,第一次关闭 项目是在 最外层包裹一层,点击的时候进行关闭, return Scaffold( resizeToAvoidBot ...
- 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 ...
- QinQ 技术解析
目录 1. 概述 2. QinQ 的产生背景 3. QinQ的作用及原理 4. QinQ 技术的优点 5. QinQ 的报文结构 6. QinQ的实现方式 (1) 基本QinQ (2) 灵活QinQ ...
- 2、使用siege进行服务端性能测试
先查看siege帮助 输入siege -h 翻译一下常用命令 -c 指定并发数 -r 指定重复次数 -d 指定请求的延迟时间,注意每个请求间随机延迟 -f 指定url列表,可以一次给多个地址加压 -t ...
- Haskell语法
http://www.ibm.com/developerworks/cn/java/j-cb07186.html 1. 构造符号 : 比如: 1:2:3:[] 而常用的 [1,2,3] 是一种语法糖( ...
- 【三】Jmeter接口自动化测试系列之Http接口自动化实战
作者:大虫 本文介绍 Jmeter 工具的 http 接口 自动化测试 实战! 为了通用性,就拿知乎 网站作为实战例子吧! 必备技能:http接口基础知识.抓包,本文不做详细介绍,不会的可以先百度恶补 ...