数据结构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 ...
随机推荐
- HTML标签分类总结
块级元素和行内元素块级元素address - 地址blockquote - 块引用center - 举中对齐块dir - 目录列表div - 常用块级容易,也是css layout的主要标签dl - ...
- (转)OS: 生产者消费者问题(多进程+共享内存+信号量)
转:http://blog.csdn.net/yaozhiyi/article/details/7561759 一. 引子 时隔一年再次用到 cout 的时候,哥潸然泪下,这是一种久别重逢的感动,虽然 ...
- (转)4年python,总结一些改善Python程序的建议
自己写Python也有四五年了,一直是用自己的"强迫症"在维持自己代码的质量.都有去看Google的Python代码规范,对这几年的工作经验,做个简单的笔记,如果你也在学pythp ...
- CSS:CSS 背景
ylbtech-CSS:CSS 背景 1.返回顶部 1. CSS 背景 CSS 背景属性用于定义HTML元素的背景. CSS 属性定义背景效果: background-color background ...
- 从pcap文件中分析出数据包
import dpkt import struct import sys,os f=file(sys.argv[1],"rb") pcap=dpkt.pcap.Reader(f) ...
- HDU 6627 equation (分类讨论)
2019 杭电多校 5 1004 题目链接:HDU 6627 比赛链接:2019 Multi-University Training Contest 5 Problem Description You ...
- Java服务定位器模式
当我们想要使用JNDI查找来定位各种服务时,使用服务定位器设计模式. 考虑到为服务查找JNDI的高成本,所以在服务定位器模式使用缓存技术. 首次需要服务时,服务定位器在JNDI中查找并缓存服务对象. ...
- 20140513 matlab画图
1.matlab画图 x1=[1.00E-06,2.00E-06,4.00E-06,9.00E-06,2.00E-05,4.00E-05,8.00E-05,2.00E-04,4.00E-04,7.00 ...
- JUC源码分析-集合篇:并发类容器介绍
JUC源码分析-集合篇:并发类容器介绍 同步类容器是 线程安全 的,如 Vector.HashTable 等容器的同步功能都是由 Collections.synchronizedMap 等工厂方法去创 ...
- python将字典列表导出为Excel文件的方法
将如下的字典列表内容导出为Excel表格文件形式: 关于上图字典列表的写入,请参考文章:https://blog.csdn.net/weixin_39082390/article/details/ ...