线性表---顺序表

来源:互联网 发布:php抽象工厂模式 编辑:程序博客网 时间:2024/04/30 18:31

1、线性表

线性表是最基本、最简单、也是最常用的一种数据结构。线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。线性表的逻辑结构简单,便于实现和操作。因此,线性表这种数据结构在实际应用中是广泛采用的一种数据结构。

线性表——List,零个或多个数据元素的有限序列。

首先它是一个序列。也就是说,元素之间是有顺序的,若元素存在多个,则第一个元素无前驱,最后一个元素无后继,其他每个元素都有且只有一个前驱和后继。

例子:假设La表示集合A,Lb表示集合B,现在要得到一个集合A使得A=AUB

void unionL(SqList *La,SqList Lb){    int La_len,Lb_len,i;    ElemType e;    La_len=ListLength(*La);    Lb_len=ListLength(Lb);    for (i=1;i<=Lb_len;i++)    {        GetElem(Lb,i,&e);        if (!LocateElem(*La,e))            ListInsert(La,++La_len,e);    }}

1.1 顺序存储结构

线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素。

就是在内存中找了块地方,通过占位的形式,把一定内存空间给占了,然后把相同数据类型的数据元素依次存放在这块空地中。

既然数据元素的类型都相同,所以可以用C语言(其他语言也相同)的一维数组来实现顺序存储结构,即把第一个数据元素存到数组下标为0的位置中,接着把线性表相邻的元素存储在数组中相邻的位置。

线性表的顺序存储结构的代码如下:

#define MAXSIZE 20      /* 存储空间初始分配量 */typedef int ElemType;   /* ElemType类型根据实际情况而定,这里假设为int */typedef struct{    ElemType data[MAXSIZE]; /* 数组,存储数据元素,最大值为MAXSIZE */    int length;             /* 线性表当前长度 */}SqList;

这里,我们发现描述顺序存储结构需要三个属性:

存储空间的起始位置——数组data,它的存储位置就是存储空间的存储位置。线性表的最大存储容量——数组长度MAXSIZE线性表的当前长度length

注意:线性表的长度应该小于等于数组的长度。

顺序表代码如下:

#include<iostream>#include<time.h>#include <stdlib.h>using namespace std;#define maxsize 20typedef int ElemType;typedef struct{    ElemType a[maxsize];    int length;}SqList;SqList Init(){    SqList L;    L.length = 0;    return L;}SqList CreateList(SqList L, int n){    srand((unsigned)time(NULL));    for(int i=0;i<n;i++)    {        //产生0~10之间的随机数。若是%100,则产生的是两位数        L.a[i] = rand()%10;        L.length++;    }    return L;}void PrintList(SqList L){    for(int i=0;i<L.length;i++)    {        cout<<L.a[i]<<" ";    }    cout<<endl;}int main(){    SqList List = Init();    List = CreateList(List, 5);    PrintList(List);    return 0;}

结果:

8 4 3 0 1Process returned 0 (0x0)   execution time : 0.223 sPress any key to continue.
0 0
原创粉丝点击