《数据结构》C++代码 线性表
线性表,分数组和链表两种(官方名称记得是叫顺序存储和链式存储)。代码里天天用,简单写写。
首先是数组,分静态、动态两种,没什么可说的,注意动态的要手动释放内存就好了。
其次是链表,依旧分静态、动态。课内一般都是讲的是动态实现,但其实还有一种静态实现方法。动态实现剩内存,但是静态实现剩时间,考试的时候当然是要视情况而定的。但是我估计,课内考试应该不会去卡这个时间,所以大家应该是不用担心(仅仅是个人看法,真被数据卡了别找我……)。
特别说明,静态链表实现,应当在开始申请够足够的内存,大家尽量在没有内存大量复用的时候使用。举个例子,比如链表里同时最多存在10000个数,但却随着过程中不断的添删,总共会有1000000000个数,那么显然应当重复使用10000个内存才对。于是,我们静态实现的话,便要自己管理内存,这简直是太麻烦了……而且会大大增加程序运行时间,还不如直接使用动态实现呢。
没啥可说的,代码很短,看了自然就懂了。没啥题目,就是简单写两句,直接上代码:
代码中给出如下定义:
const int maxn = ;
int N; cin>>N; // 以N个数的线性表为例
数组实现:
int A[maxn+]; // 数组 静态实现 int *A=new int[maxn+]; // 数组 动态实现
delete[] A; A[i]=; // 使用方法相同
链表结点定义:
struct node // 链表结点定义 以双向链表为例
{
int c;
node *l,*r;
node(int _c=) { c=_c; l=r=; }
node* born(node *u) // 在this右侧插入点u
{
node *v=r; // 由于在this右侧插入,故this!=B,v!=0
u->r=v; if(v) v->l=u; // 但开始的时候,A born B时会产生v==0的状态
u->l=this; r=u;
return u;
}
void del() // 删除this右侧点
{
node *u=r,*v=r->r; // 由于u右侧应有点,故u->r!=B,即v!=B
r=v; if(v) v->l=this; // 这里可以不用if(v),因为就算删最后一个点,v也是B,不会不存在
delete u; // 静态实现的时候,无需删除,也无法删除,此句省去即可
}
};
动态链表:
class List // 链表 动态实现
{
node *A,*B;
public:
node* add(int c=) { return A->born(new node(c)); }
void del(int c)
{
for(node *p=A;p->r!=B;p=p->r)
if(p->r->c==c) { p->del(); break; }
}
void look() { for(node *p=A->r;p!=B;p=p->r) cout<<p->c<<" "; }
void clear() { while(A->r!=B) A->del(); } List(int N=)
{
A=new node; B=add(); // 设置2个空结点,一头一尾,比较对称,不过多一个点,看个人习惯。这时,A->r==B是链表空的判断标准。
for(int x,i=;i<=N;++i) { cin>>x; add(x); }
}
~List() { clear(); }
};
静态链表:
class List // 链表 静态实现
{
int L;
node Box[maxn],*A,*B;
node* make(int c=) { Box[L].c=c; return &Box[L++]; } // 使用时,仅仅是将new node换成make就好了
public:
node* add(int c=) { return A->born(make(c)); }
void del(int c)
{
for(node *p=A;p->r!=B;p=p->r)
if(p->r->c==c) { p->del(); break; }
}
void look() { for(node *p=A->r;p!=B;p=p->r) cout<<p->c<<" "; }
void clear() { A->r=B; B->l=A; } List(int N=)
{
A=make(); B=add();
for(int x,i=;i<=N;++i) { cin>>x; add(x); }
}
~List() { clear(); }
};
《数据结构》C++代码 线性表的更多相关文章
- C++ 数据结构 1:线性表
1 数据结构 1.1 数据结构中基本概念 数据:程序的操作对象,用于描述客观事物. 数据的特点: 可以输入到计算机 可以被计算机程序处理 数据是一个抽象的概念,将其进行分类后得到程序设计语言中的类型. ...
- 【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语言数据结构+严蔚敏——线性表章节源码,利用Codeblocks编译通过
白天没屌事,那我们就来玩玩线性表的实现吧,快要失业了,没饭吃了咋整哦 题目描述假设利用两个线性表LA和LB分别表示两个集合A和B(即:线性表中的数据元素即为集合中的成员),现要求一个新的集合A=A∪B ...
- C语言数据结构——第二章 线性表
二.线性表 2.1-线性表简介 2.1.1-线性表的定义 线性表是由若干个相同特性的数据元素组成的有限序列.若该线性表不包含任何元素,则称为空表,此时长度为0,当线性表不为空时,表中的元素的个数就是线 ...
- 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 ...
随机推荐
- Android_ListView适配器
ListView如何优化 复用convertView缓存(减少ListView绘制). 自定义静态类ViewHolder(减少findViewById次数),通过setTag().getTag()获取 ...
- tp5 验证是不是ajax提交
话不多说,看代码 if(request()->isAjax()){ return "是ajax提交"; }else{ return "不是ajax提交"; ...
- Javascript与C#中使用正则表达式
JavaScript RegExp 对象 新建一个RegExp对象 new RegExp(pattern,[attributes]) 注: \d需要使用[0-9]来代替 参数 参数 ...
- PHP:(一)安装并使用PHP
php的安装分为两个部分:环境安装配置和开发工具 一.集成环境安装配置 (一)安装 选择:wampserver或者xampp 我采用的是xampp. 在http://www.sourceforce.n ...
- 太阳地球月亮运行动画(使用@keyframes)
闲来无事的demo <!DOCTYPE html> <html> <head> <meta charset="utf-8"> < ...
- 基于mybatis设计简单OA系统问题1
全类名与全路径 全类名是某个文件在项目中的位置,格式为包名.类名 路径分为相对路径和绝对路径. 绝对路径是指这个文件在操作系统中的位置, 相对路径通过这个文件的上一级 ./ 或下一级/ 来指定文件 ...
- 如何快速查看mysql数据文件存放路径?
进入mysql终端 mysql>show variables like '%datadir%'; 出来的结果即是!
- linux 安装 zookeeper
第一步 下载 zookeeper: http://archive.apache.org/dist/zookeeper/ 第二步 解压: tar -xzvf zookeeper-3.4.5.tar.gz ...
- 【CSS】多行溢出显示省略号
display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 3;//超出三行隐藏 overflow: hidden; ...
- json_encode 的小技巧
做了一个 API 文档自动生成,解析的是每个 控制器类 的注释 json 数据,在做测试工具的时候,多层的 json 只有通过一个 textarea 把数据弄进去.如下图 怎么格式化 Json 数据并 ...