线性表,分数组和链表两种(官方名称记得是叫顺序存储和链式存储)。代码里天天用,简单写写。

首先是数组,分静态、动态两种,没什么可说的,注意动态的要手动释放内存就好了。

其次是链表,依旧分静态、动态。课内一般都是讲的是动态实现,但其实还有一种静态实现方法。动态实现剩内存,但是静态实现剩时间,考试的时候当然是要视情况而定的。但是我估计,课内考试应该不会去卡这个时间,所以大家应该是不用担心(仅仅是个人看法,真被数据卡了别找我……)。

特别说明,静态链表实现,应当在开始申请够足够的内存,大家尽量在没有内存大量复用的时候使用。举个例子,比如链表里同时最多存在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++代码 线性表的更多相关文章

  1. C++ 数据结构 1:线性表

    1 数据结构 1.1 数据结构中基本概念 数据:程序的操作对象,用于描述客观事物. 数据的特点: 可以输入到计算机 可以被计算机程序处理 数据是一个抽象的概念,将其进行分类后得到程序设计语言中的类型. ...

  2. 【C#数据结构系列】线性表

    一:线性表 1.1:定义:零个或多个数据元素的有限序列 1.2: 线性表元素个数n定义为线性表的长度,n = 0称为空表,i 为数据元素ai在线性表中的位序. 1.3:满足线性表的条件:(1):有序, ...

  3. 【算法与数据结构实战】线性表操作-实现A并B,结果放入A中

    //数据结构与算法基础题1:线性表操作,实现A并B,结果放入A中 #include "stdafx.h" #include <iostream> #include &l ...

  4. PHP数据结构之二 线性表中的顺序表的PHP实现

    线性表 (一)基本特点:最基本.最简单.最常用的一种数据结构 在这种结构中: 1.存在一个唯一的被称为“第一个”的数据元素: 2.存在一个唯一的被称为“最后一个”的数据元素: 3.除第一个元素外,每个 ...

  5. 基于c语言数据结构+严蔚敏——线性表章节源码,利用Codeblocks编译通过

    白天没屌事,那我们就来玩玩线性表的实现吧,快要失业了,没饭吃了咋整哦 题目描述假设利用两个线性表LA和LB分别表示两个集合A和B(即:线性表中的数据元素即为集合中的成员),现要求一个新的集合A=A∪B ...

  6. C语言数据结构——第二章 线性表

    二.线性表 2.1-线性表简介 2.1.1-线性表的定义 线性表是由若干个相同特性的数据元素组成的有限序列.若该线性表不包含任何元素,则称为空表,此时长度为0,当线性表不为空时,表中的元素的个数就是线 ...

  7. JAVA中的数据结构——集合类(线性表:Vector、Stack、LinkedList、set接口;键值对:Hashtable、Map接口<HashMap类、TreeMap类>)

    Java的集合可以分为两种,第一种是以数组为代表的线性表,基类是Collection:第二种是以Hashtable为代表的键值对. ... 线性表,基类是Collection: 数组类: person ...

  8. c语言数据结构学习心得——线性表

    线性表:具有相同数据类型的n(n>0)个数据元素的有限序列. 主要有顺序存储和链式存储. 顺序存储: 特点:地址连续,随机/存取,顺序存储. 建立:首地址/存储空间大小(数组),表长. 方式:静 ...

  9. 数据结构导论 四 线性表的顺序存储VS链式存储

    前几章已经介绍到了顺序存储.链式存储 顺序存储:初始化.插入.删除.定位 链式存储:初始化.插入.删除.定位 顺序存储:初始化 strudt student{ int ID://ID char nam ...

随机推荐

  1. 出现Permission denied的解决办法

    出处 https://blog.csdn.net/qq_16525279/article/details/80245350 提示 Permission denied 解决的办法: $ sudo chm ...

  2. v-for的深层用法

    为了提升循环的性能,我们会给循环加上一个唯一的key值,这个key值一定是唯一的 <div id='root'> <div v-for='(item,index) of list' ...

  3. Linux空间PHP开发环境小白教程(LAMP)

    租了一个云服务器, 但是只有linux系统,没有php开发环境, 只好自己摸索着一步一步安装啦. 本教程来自自学IT创E老师的Linux教程,想详细了解的可以去论坛找. 一.使用PUTTY登录服务器 ...

  4. 2018.8.2 Juint测试介绍及其命名的规范

    JUnit - 测试框架 什么是 Junit 测试框架? JUnit 是一个回归测试框架,被开发者用于实施对应用程序的单元测试,加快程序编制速度,同时提高编码的质量.JUnit 测试框架能够轻松完成以 ...

  5. while counter<10:

    [root@chenbj test]# python Python 2.7.5 (default, Nov 6 2016, 00:28:07) [GCC 4.8.5 20150623 (Red Hat ...

  6. img适配问题解决方法

    将img放到background中,将background-size设置为100%:只需要适配背景为img的元素的宽和高即可.

  7. wm_concat()函数

    工作中遇到这样一个问题,一张数据库表中有一个字段file_id,还有一个主键f_id(唯一),而file_id不唯一,我想把file_id=‘123456789’的记录中的f_id(主键)连接成一个字 ...

  8. typeid操作符

    typeid() operator返回type_info,返回值不可拷贝.不可赋值 // Illustrates the typeid operator. #include <iostream& ...

  9. SpringBoot学习14:springboot异常处理方式4(使用SimpleMappingExceptionResolver处理异常)

    修改异常处理方法3中的全局异常处理Controller即可 package bjsxt.exception; import org.springframework.context.annotation ...

  10. java基础 File与递归练习 使用文件过滤器筛选将指定文件夹下的小于200K的小文件获取并打印按层次打印(包括所有子文件夹的文件) 多层文件夹情况统计文件和文件夹的数量 统计已知类型的数量 未知类型的数量

    package com.swift.kuozhan; import java.io.File; import java.io.FileFilter; /*使用文件过滤器筛选将指定文件夹下的小于200K ...