《数据结构》C++代码 线性表

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

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

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

特别说明,静态链表实现,应当在开始申请够足够的内存,大家尽量在没有内存大量复用的时候使用。举个例子,比如链表里同时最多存在10000个数,但却随着过程中不断的添删,总共会有1000000000个数,那么显然应当重复使用10000个内存才对。于是,我们静态实现的话,便要自己管理内存,这简直是太麻烦了……而且会大大增加程序运行时间,还不如直接使用动态实现呢。

没啥可说的,代码很短,看了自然就懂了。没啥题目,就是简单写两句,直接上代码:

代码中给出如下定义:

const int maxn = 100;
int N; cin>>N; // 以N个数的线性表为例

数组实现:

int A[maxn+1]; // 数组 静态实现

int *A=new int[maxn+1]; // 数组 动态实现
delete[] A;

A[i]=3; // 使用方法相同

链表结点定义:

struct node // 链表结点定义 以双向链表为例
{
    int c;
    node *l,*r;
    node(int _c=0) { c=_c; l=r=0; }
    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; v->l=this;
        delete u; // 静态实现的时候,无需删除,也无法删除,此句省去即可
    }
};

动态链表:

class List // 链表 动态实现
{
    node *A,*B;
public:
    node* add(int c=0) { 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() { for(node *p=A;p->r!=B;) p->del(); }

    List(int N=0)
    {
        A=new node; B=in(); // 设置2个空结点,一头一尾,比较对称,不过多一个点,看个人习惯。这时,A->r==B是链表空的判断标准。
        for(int x,i=1;i<=N;++i) { cin>>x; in(x); }
    }
    ~List() { clear(); }
};

静态链表:

class List // 链表 静态实现
{
    int L;
    node Box[maxn],*A,*B;
    node* make(int c=0) { Box[L].c=c; return &Box[L++]; } // 使用时,仅仅是将new node换成make就好了
public:
    node* in(int c=0) { return A->born(make(c)); }
    void out(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=0)
    {
        A=make(); B=in();
        for(int x,i=1;i<=N;++i) { cin>>x; in(x); }
    }
    ~List() { clear(); }
};
时间: 2024-10-05 03:07:32

《数据结构》C++代码 线性表的相关文章

数据结构学习笔记——线性表

第2章  线性表 2.1  线性表的类型定义  线性结构的特点是:在数据元素的非空有限集中,(1)存在唯一的一个被称做“第一个”的数据元素:(2)存在唯一的一个被称做“最后一个”的数据元素:(3)除第一个之外,集合中的每个数据元素只有一个前驱:(4)除最后一个外,集合中每个数据元素均只有一个后继. 线性表的类型定义 线性表(linear_list)是最常用的且最简单的一种数据结构.一个线性表是n个数据元素的有限序列.在稍复杂的线性表中,一个数据元素可以由若干个数据项(item)组成.在这种情况下

数据结构学习笔记——线性表的应用

数据结构学习笔记——线性表的应用 线性表的应用 线性表的自然连接 计算任意两个表的简单自然连接过程讨论线性表的应用.假设有两个表A和B,分别是m1行.n1列和m2行.n2列,它们简单自然连接结果C=A*B(i==j),其中i表示表A中列号,j表示表B中的列号,C为A和B的笛卡儿积中满足指定连接条件的所有记录组,该连接条件为表A的第i列与表B的第j列相等. 如:         1 2 3                3 5 A  =  2 3 3         B =  1 6       

python数据结构之一:线性表

线性表:零个或多个数据元素的有限序列. 咋一看这句话,我也不明白是什么意思,哈哈,举例说明一下吧.去电影院买票时,人们的排队就是一个线性表,有固定的最前一个,固定的最后一个. 张三是其中一个,他的前一个人,和后一个人是确定的单一的. 再如,一个公司里的一个部里有一个领导,多名员工,他们的关系就不是线性表了,有一对多的关系. 那么在python里如何创建线性表呢?如下: L1=["a","b","c","d","e&q

数据结构笔记之线性表

线性表即链表,基本特点是除第一个元素无直接前驱,最后一个元素无直接后继之外,其他么个数据元素都有一个前驱和后继.是最基本且最常用的一种线性结构. 2.1线性表的定义和特点 由n(n>=0)个数据特性相同的元素否城的有限序列成为线性表,n为线性表长度,当n=0称空表. 举例:1.26个英文字母的字母表是一个线性表,数据元素是单个字母. 2.学生信息表中,每一个学生为一个数据元素,包括学号.姓名.性别等等数据项. 2.2案例:图书信息管理系统. 2.3线性表的类型定义 线性表是一个相当灵活的数据结构

数据结构第一篇——线性表的逻辑结构

?注:未经博主同意,不得转载. 线性表(linear list)是最常用且最简单的数据结构.简言之,一个线性表是n个数据元素的有限序列.至于每个数据元素的具体含义,在不同的情况下各不相同.例如,26个英文字母的字母表: (A,B,C,D,......Z) 线性表的抽象数据类型定义如下: 1 ADT List 2 { 3 Data: D={Ai|Ai<DataSet,i=1,2,...,n, n>=0} 4 //称n为线性表的表长 5 //称n=0时的线性表为空表 6 Structure: R=

数据结构与算法—线性表详解

前言 通过前面数据结构与算法前导我么知道了数据结构的一些概念和重要性,那么我们今天总结下线性表相关的内容.当然,我用自己的理解解分享给大家. 其实说实话,可能很多人依然分不清线性表,顺序表,和链表之间的区别和联系! 线性表:逻辑结构, 就是对外暴露数据之间的关系,不关心底层如何实现. 顺序表.链表:物理结构,他是实现一个结构实际物理地址上的结构.比如顺序表就是用数组实现.而链表用指针完成主要工作.不同的结构在不同的场景有不同的区别. 对于java来说,大家都知道List接口类型,这就是逻辑结构,

数据结构 笔记2 线性表

线性表是最简单,最常用的一种数据结构,它是由n个数据元素(结点)组成的有限序列. 线性表的基本运算 1.置空表 InitList(L) ,构造一个空的线性表L 2.求表长 ListLength(L) ,返回线性表L中元素个数,即表长. 3.取表中第i个元素GetNode(L,i) ,若1 <= i <= ListLength(L) ,则返回第i个元素a[i] 4.按值查找LocateNode(L,x),在表L中查找第一个值为x的元素,并返回该元素在表L中的位置,若表中没有元素的值为x,则返回0

数据结构一:线性表

线性表是最常用也是最简单的数据结构,几种常用的线性表的类模板C++描述描述如下: 1.顺序表 顺序表是将所有元素按逻辑顺序存储在一组地址连续的存储空间中的简单数据结构: 1 const int MAXSIZE = 1000; 2 template<class T> 3 class SeqList 4 { 5 public: 6 SeqList(){ lenght = 0; } // 无参构造函数 7 SeqList(const T a[], int n); // 带参构造函数,并用数组初始化

数据结构与算法-线性表

近期在学习数据结构,反反复复已经看过几遍了,也做了一些练习题,但总感觉不记录一下,思路就不是很清晰,所以,从今天开始总结这段时间对数据结构的学习. 无论学习什么,基础知识都是最总要的,数据结构也不例外.线性表就是数据结构的基础,很多常见的数据结构都是基于线性表来实现的. 那么,什么是线性表呢?官方的定义是: 零个或多个数据元素的有限序列 可以从两个方面来理解线性表,首先它是一个序列,也就是其中的元素有先后顺序,其次是有限的,对于无线数列,也只能存在于理论数学中. 说了这么多,小结一下: 1)线性