数据结构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 ...
随机推荐
- Robot Framework:接口测试
---恢复内容开始--- robotframework进行接口测试,需要安装Request和RequestLibrary包 pip install requests pip install -U ro ...
- delphi下运行vbscript脚本
简单一个vb脚本,功能为打开被限制的注册表.Set wso = CreateObject("WScript.Shell")wso.RegWrite "HKEY_CURRE ...
- 合并vector里的内容,输出一个string
string merge_vector(vector<string> dp_scpe_all) { //合并vector里的内容 string new_dp_scpe; ; m < ...
- vue2 核心概念
一.vue变量 所有的 vue变量 ,必须在data:中有注册(哪怕内容是空,相当于声明这个是变量,是vue变量而不是js变量).这里的变量也可以运算.(注意:所有的框架一定要注意js变量和框架的变量 ...
- Spring源码剖析3:Spring IOC容器的加载过程
本文转自五月的仓颉 https://www.cnblogs.com/xrq730 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https ...
- 使用linkedhashmap实现LRU(最近最少使用缓存算法)
import java.util.LinkedHashMap; import java.util.Map; public class LRUCache<K, V> extends Link ...
- 6、通过Appium Desktop 实现录制功能
1.老规矩,我们进入下面这个界面 图中红色标记1为 “top by coordinates” 按钮, 这是一种通过坐标定位元素的方式. 图中红色标记2为 “Start Recording” 按钮, ...
- MySQL数据库(二)——库相关操作、表相关操作(一)、存储引擎、数据类型
库相关操作.表相关操作(一).存储引擎.数据类型 一.库相关操作 1.创建数据库 (1)语法 create database 数据库 charset utf8; (2)数据库命名规范 可以由字母.数字 ...
- C语言指针和字符串
#include <stdio.h> int main() { /********************************************* * 内存: * 1.常量区 * ...
- transport error 202: bind failed: Address already in use
background: I have terminated some test debugger without properly saying goodbye. the JDWP didn't cl ...