《数据结构》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 ...
随机推荐
- 使用loadrunner 12 手动关联
关联的含义: 如浏览器打发送一个网页A请求,服务器返回这个请求,并且在返回的内容中携带一个session id=key,当浏览器再送出网页B的请求时,这时就要用ID=key的数据,服务器才会认为这是合 ...
- P1151 子数整数
题目描述 对于一个五位数a_1a_2a_3a_4a_5a1a2a3a4a5,可将其拆分为三个子数: sub_1=a_1a_2a_3sub1=a1a2a3 sub_2=a_2a_3a_ ...
- memcache 基本操作
输入 telnet localhost 11211 步骤: 1.输入 set hans 0 0 3 回车 2. 输入 123 回车 3. get hans 回车 删除操作,输入 delete h ...
- Spring 远程调用工具类RestTemplateUtils
Spring 远程调用Rest服务工具类,包含Get.Post.Put.Delete四种调用方式. 依赖jar <dependency> <groupId>org.spring ...
- mysql中locate和substring函数使用
locate函数使用 LOCATE(substr,str) 1.如果子串 substr 在 str 中不存在,返回值为 0: 2.如果子串 substr 在 str 中存在,返回该字符串第一次出现的位 ...
- java设计模式——迭代器模式
一. 定义与类型 定义:提供一种方法,顺序访问一个集合对象中的各个元素,而又不暴露该对象的内部表示 类型:行为型. 二. 使用场景 (1) 访问一个集合对象的内容而无需暴露它的内部表示 (2) 为遍 ...
- (转)ActionContext和ServletActionContext
前面已经了解到ActionContext是Action执行时的上下文,里面存放着Action在执行时需要用到的对象,我们也称之为广义值栈. Struts2在每次执行Action之前都会创建新的Acti ...
- 折腾Vscode写C++
一直以来都是用Sublime Text3写C/C++.因为ST配置简单,轻量.闲来没事才弄一弄. 1. 新建文件夹C++Code,并且再建立一个bulid文件夹来放要写的代码. 2. 在Vscod ...
- 牛客小白月赛2 J 美 【构造】
链接:https://www.nowcoder.com/acm/contest/86/J来源:牛客网 题目描述 最后,Sεlιнα(Selina) 开始了选美大赛. 一如既往地,Sεlιнα 想最大化 ...
- Eclipse中文乱码解决方案
Eclipse中文乱码解决方案 1)第一个设置:window>perferences>general>workspace>text file encoding 2)Jsp编码问 ...