数据结构(线性表)

一、定义

1线性表是具有相同数据类型的n(n>=0)个数据元素的有限序列,其中n为表长。n=0时表示一个空表。

L=(a1,a2,a2.....an)    其中a1:称为表头元素  an:称为表尾元素  且除了a1外其余结点有且只有一个直接前驱,除了an外其余结点有且只有一个直接后继。

2.特点:

1)表中元素的个数有限。

2)表中元素具有逻辑上的顺序性(序列中各元素有其先后次序)。

3)表中元素都是数据元素(每个元素都是单个元素)。

4)表中元素的数据类型都相同(每个元素占有相同大小的存储空间)

5)元素具有抽象性(仅讨论元素间的逻辑关系,不考虑其内容。)

(线性表是一种逻辑结构,表示元素间一对一的相邻关系。而顺序表和链表是指存储结构。二者属于不同层面的概念。)

二、基本操作

InitList(&L):初始化表,构造一个空的线性表。
Length(L):求表长。返回线性表的长度,即L中数据元素的个数。
LocateElem(L,e):按值查找。在表L中找等于关键字e的元素。
GetElem(L,i):按位查找。获取表L中第i个位置元素的值。
ListInsert(&L,i,e):插入操作。在表L中的第i个位置上插入元素e。
ListDelete(&L,i,&e):删除操作。删除表L中第i个位置的元素,并用e返回删除元素的值。
printList(L):输出操作。按前后顺序输出线性表L的所有元素值。
Empty(L):判空操作。若L为空表则返回true,否则返回false。
DestroyList(&L):销毁操作。销毁线性表,并释放内存空间。

三、顺序表

1.线性表的顺序存储又称为顺序表。它是用一组地址连续的存储单元(如C中的数据)依次存储线性表中的元素。

2.存储器的位置Loc(ai)=Loc(a1)+(i-1)*d (d为元素所占的存储单元数)

3.存取时间复杂度为O(1),即随机存取。

4.静态建表和动态建表

需满足三个条件:

1)存储空间的起始位置     2)顺序表的最大存储容量     3)顺序表的当前长度(需小于最大存储容量,否则会溢出)

#define MaxSize 50 //定义线性表的最大长度      
typedef int Elemtype//表中的元素类型为Int      
typedef strut{                                
ElemType data [MaxSize];//定义顺序表的元素     
int length;//定义顺序表的当前长度               
}SqList;//顺序表的类型定义(静态建表)

#define InitSize 100//表长度的初始定义
typedef struct{
ElemType *data//不开数组,指示动态分配数组的指针
int MaxSize,length;//数组的最大容量与当前个数
}SeqList //动态分配数组顺序表的类型定义。

//C语言的描述:
L.data=(ElemType*)malloc(sizeof(ElemType)*InitSize);//malloc函数的作用是分配存储空间
sizeof的的作用是取括号的存储容量的大小
而(ElemType*)作用为:类型转换,使得其与data一致。

(动态分配虽然用到了指针,但并非链式存储,它同样属于顺序存储结构,依然为随机存储方式,只是分配空间大小可以在程序执行时进行。)

数据结构(线性表)

上一篇:数据结构-栈


下一篇:实现顺序表的各种基本运算和整体建表方法