线性表

一、前言

    线性结构的特点:

        在数据元素的非空有限集合中,

            1、存在唯一的一个被称为“第一个”的数据元素;

            2、存在唯一的一个被称为“最后一个”的数据元素;

            3、除第一个之外,集合中的每个元素均只有一个前驱;

            4、除最后一个元素外,集合中每一个数据元素都有一个后继;

二、类型定义

    1、概念:一个线性表是n个数据元素的有限序列。

        例如,26个英文字母的字母表(A,B,C,,,,,Z)是一个线性表,表中的数据元素为单个字母字符。

    2、在稍微复杂的线性表中,一个数据元素可以由若干个数据项组成。在这种情况下,常把数据元素称为记录,含有大量记录的线性表又称为文件。

    3、线性表的特点:

            同一个线性表中的元素必须具有相同的特性,即属于同一个数据对象,相邻数据元素之间存在着序偶关系,若将线性表记为:

    (a1,a2,a3,……an);

    则表中的a1是a2的直接前驱元素,a2是a1的直接后继元素

    4、线性表的长度:线性表中数据元素的个数n(n>=0)定义为线性表的长度,n=0时称为空表

    5、位序:ai是第i个数据元素,称i是数据元素ai在线性表中的位序。

    6、抽象数据类型线性表的定义如下:

       ADT List

{

数据对象:D={ai|ai属于ElemSet,i=1,2,3,......n,n>=0}

数据关系:R1={<ai-1,ai>|ai-1,ai属于D,i=2....,n}

基本操作:

InitList(&L)

操作结果:构造一个空的线性表

DestroyList(&L)

初始化条件:线性表已经存在

操作结果:销毁线性表

ClearList(&L)

初始化条件:线性表已经存在

操作结果:将L重置为空表

ListEmpty(L)

初始条件:线性表已经存在

操作结果:返回L中元素的个数。

GetElem(L,i,&e)

初始条件:线性表已经存在,1<=i<=ListLength(L)

操作结果:用e返回线性表L中第i个元素的值

LocateElem(L,e,compare())

初始条件:线性表L已经存在,compare()是数据元素判定函数

操作结果:返回L中第1个与e满足关系compare()的数据元素的位序。若这样的元素不存在,则返回值为0

PriorElem(L,cur_e,&pre_e)

初始条件:线性表已经存在

操作结果:若cur_e是L中的数据元素,且不是第一个,则用pre_e返回它的前驱,否则操作失败,pre_e无定义

NextElem(L,cur_e,&next_e)

初始条件:线性表已经存在

操作结果:若cur_e是L中的数据元素,且不是最后一个,则用next_e返回它的后继,否则操作失败,next_e无定义

ListInsert(&L,i,e)

初始条件:线性表L已经存在,1<=i<=ListLength(L)+1

操作结果:在L中第i个位置之前插入新的数据元素e,L的长度加1

ListDelete(&L,i,&e)

初始条件:线性表已经存在且非空,1<=i<=ListLength(L)

操作结果:删除L中第i个元素,并用e返回其值,L的长度减1

ListTraverse(L,visit())

初始条件:线性表已经存在

操作结果:依次对L的每个元素调用函数Visit().一旦visit()失败,则操作失败

}ADT List

    7、线性表组合

        已知La,Lb,求La = LaULb


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

void union(List &La,List &Lb)

 

{

 

//将所有Lb中不在La中的数据元素插入到La中

 

La_len = ListLength(La);

 

Lb_len = ListLength(Lb);

 

for(i=1;i<Lb_len;i++)

 

{

 

GetElem(Lb,i,&e);

 

if(!LocateElem(La,e,equal()))

 

{

 

ListInsert(&La,++La_len,&e)

 

}

 

}

 

}

 

  

     

  

时间: 2024-08-29 02:18:50

线性表的相关文章

顺序存储线性表-数据结构顺序表的操作(c++)

问题描述 数据结构顺序表的操作(c++) 求解答谢谢 解决方案 贴出代码而不是截图.发了帖子你难道自己不看下.这么小的字根本看不清. 解决方案二: 什么是线性表?定义:由n(n>=0)个数据类型相同的数据元素组成的有限序列.特点是:在数据元素的非空有限集合中,除第一个元素无直接前驱,最后一个元素无直接后继外,集合中其余每个元素均有唯一的直接前驱和直接后继.什么是顺序表,在这里回答一下.顺序表就是线性表的顺序存储,其特点是:物理顺序与逻辑顺序是相同的,关系线性化,结点顺序存.线性表顺序存储的表示?

线性表的链式表示

以下为操作链表的算法,该链表为动态单链表. 链表以头指针为索引,头指针指向头节点,头节点指向首节点,以此类推,直到尾节点. 头节点中不存放数据,只存放指向首节点的指针, 设置头节点的目的是为了方便对链表的操作,如果不设置头节点,而是直接由头指针指向首节点, 这样在对头指针后的节点进行插入删除操作时就会与其他节点进行该操作时有所不同,便要作为一种特殊情况来分析 操作系统:ubuntu 编译软件:gcc 结果截图: 源代码: #include<stdio.h> #include<stdlib

大话数据结构六:特殊的线性表(栈)

1. 什么是栈? 栈(stack)是限定仅在表尾进行插入和删除操作的线性表. 2. 栈的特点: 1.) 栈又称为后进先出(Last In First out)的线性表,栈元素具有线性关系,即前驱后继关系. 2.) 栈的特殊之处在于:它的栈底是固定的,只允许在栈顶进行插入和删除操作. 3. 栈的顺序存储结构(Java数组实现): // 栈的数组实现, 底层使用数组: public class ArrayStack<T> { private Object[] arr; // 数组首元素作为栈底,因

大话数据结构五:线性表的链式存储结构(双向链表)

1. 双向链表:在单链表的每个结点中,再设置一个指向其前驱结点的指针域,那么在双向链表中的结点都有两个指针域,一个指向直接后继,另一个指向直接前驱. 2. 单链表和双向链表比较: 单链表:总是要从头到尾找结点,只能正遍历,不能反遍历. 双向链表: 可以从头找到尾,也可以从尾找到头,即正反遍历都可以,可以有效提高算法的时间性能,但由于每个结点需要记录两份指针,所以在空间占用上略多一点,这就是通过空间来换时间. 3. Java实现双向链表: // 双向链表 public class DoubleLi

大话数据结构四:线性表的链式存储结构(单向循环链表)

1. 单向循环链表:将单链表尾结点的指针端由空指针改为指向头结点,使整个单链表形成一个环,这种头尾相接的单链表称为单向循环链表.   2. 单向循环链表和单链表实现的区别: 1.)添加一个结点到单向循环链表末尾时,必须使其最后一个结点的指针指向表头结点,而不是象单链表那样置为null. 2.)判断是否到达表尾时,单向循环链表可以判断该结点是否指向头结点,单链表只需要知道是否为null.   3.Java实现单向循环链表: // 单向循环链表 public class CircularLinked

大话数据结构二:线性表的链式存储结构(单链表)

1. 线性表的链式存储结构:指的是用一组任意的存储单元存储线性表的数据元素,这组存储单元可以是连续的,也可以是不连续的,这就意味着这些数据元素可以存在内存未被占用的任意位置. 2. 结点:结点由存放数据元素的数据域和存放后继结点地址的指针域组成. 1.)顺序存储结构中,每个数据元素只需要存数据元素的信息就可以了. 2.)链式存储结构中,除了要存储数据元素信息外,还要存储它的后继元素的存储地址. 3.)链表中第一个结点叫头结点,它的存储位置叫做头指针,它的数据域可以不存储任何信息,链表的最后一个结

大话数据结构一:线性表的顺序存储结构

1. 线性表的顺序存储结构:指的是用一段地址连续的存储单元依次存储线性表的数据元素. 2. Java实现线性表的顺序存储结构: // 顺序存储结构 public class SequenceList { private static final int DEFAULT_SIZE = 10; // 默认初始化数组大小 private int size; // 当前数组大小 private static Object[] array; public SequenceList() { init(DEF

数据结构C语言实现之线性表

#include <stdio.h>#include <stdlib.h>typedef int elemType; /************************************************************************//* 以下是关于线性表顺序存储操作的16种算法 *//************************************************************************/struct Lis

数据结构教程 第五课 线性表的类型定义

教学目的: 掌握线性表的概念和类型定义 教学重点: 线性表的类型定义 教学难点: 线性表的类型定义 授课内容: 复习:数据结构的种类 线性结构的特点: 在数据元素的非空有限集中, (1)存在唯一的一个被称做"第一个"的数据元素: (2)存在唯一的一个被称做"最后一个"的数据元素: (3)除第一个之外,集合中的每个数据元素均只有一个前驱: (4)除最后一个之外,集合中每个数据元素均只有一个后继. 一.线性表的定义 线性表是最常用且最简单的一种数据结构. 一个线性表是n

数据结构教程 第六课 线性表的顺序表示和实现

本课主题: 线性表的顺序表示和实现 教学目的: 掌握线性表的顺序表示和实现方法 教学重点: 线性表的顺序表示和实现方法 教学难点: 线性表的顺序存储的实现方法 授课内容: 复习 1.存储结构 逻辑结构   "数据结构"定义中的"关系"指数据间的逻辑关系,故也称数据结构为逻辑结构. 存储结构   数据结构在计算机中的表示称为物理结构.又称存储结构. 顺序存储结构 链式存储结构 2.线性表的类型定义 一.线性表的顺序表示 用一组地址连续的存储单元依次存储线性表的数据元素