一些基本概念和术语:
数据:是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合数据元素:是组成数据的,有一定意义的基本单位,在计算机中通常作为整体处理。也被称为记录
数据项:一个护具元素可以有若干个数据项组成,是数据不可分割的最小单位
数据对象:是性质相同的数据元素的集合,是数据的子集
数据结构:是相互之间存在一种或多种或多种特定关系的数据元素的集合。
逻辑结构:是指数据对象中数据元素之间的相互关系。
有以下四种关系: ①集合结构:集合结构中的数据元素除了同属于一个集合外,他们之间没有任何关系
②线性结构:线性结构中的数据元素之间是一对一的关系
③树形结构:树形结构中的数据元素之间存在一种一对多的层次关系
④图形结构:图形结构中的数据元素是多对多的关系
物理结构:是指数据的逻辑结构在计算机中的存储形式,分别是顺序存储和链式存储
顺序存储:是把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的
链式存储:是把数据元素存放在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续 的
线性表:(元素有a1-an)
1.线性表的定义:零个或多个数据元素的有限队列
除了第一个数据元素没有前驱和末尾元素没有后继外,其他元素都有一个前驱和一个后继。
2.线性表的顺序存储结构
指的是用一段地址连续的存储单元一次存储线性表的数据元素。示意图如下:
顺序存储的结构代码:
#define MAXSIZE 20 /*存储空间初始分配量*/
typedef int ElemType; /*数据类型视情况而定*/
typedef struct
{
ElemType data[MAXSIZE]; /*数组存储数据元素*/
int length; /*线性表当前长度*/
}SqList;
顺序存储结构的插入与删除:
获得元素:
/*初始条件:顺序线性表L已存在,
操作结果:返回值e表示L中第i个数据元素的值*/
#define error 0;
#define success 1;
int GetElem(SqList L, int i, ElemType *e)
{
if(L.length == 0 || i < 1 || i > length)
{
return error;
}
*e = L.data[i - 1];
return success;
}
插入操作:
插入算法的思路:
插入位置不合理,抛出异常;
若线性表长度大于等于数组长度,则抛出异常或动态增加容量;
插入元素填入i处,i处后面的每个元素后移一位;
插入位置不合理,抛出异常;
若线性表长度大于等于数组长度,则抛出异常或动态增加容量;
插入元素填入i处,i处后面的每个元素后移一位;
表长+1
代码举例:
int ListInsert(SqList *L,int i,ElemType e)
{
int k;
if(L->length == MAXSIZE)
{
return error;
}
if(i < 1 || i > L->length + 1)
{
return error;
}
if(i <= L->length) /*插入元素不在表尾*/
{
for(k = L->length - 1; k >= i - 1; k--)
{
L->data[k + 1] = L->data[k];
L->data[k + 1] = L->data[k];
}
L->data[i - 1] = e; /*插入新元素*/
L->length++;
return success;
}
}
删除操作:
删除操作思路:
删除位置不合理,抛出异常;
取出删除元素;
从删除位置开始遍历到最后一个元素,分别将他们向前移动一个位置;
取出删除元素;
从删除位置开始遍历到最后一个元素,分别将他们向前移动一个位置;
表长-1
代码举例:
int ListDelete(SqList *L,int i,ElemType e)
{
int k;
if(L->length == 0) /*线性表为空*/
{
return error;
}
if(i < 1 || i > L->length) /*删除位置不正确*/
{
return error;
}
*e = L->data[i - 1];
if(i < L->length) /*如果删除不是最后1个位置*/
{
for(k = i; k < L->length; k++) /*将删除位置后继元素前移*/
{
L->data[k - 1] = L->data[k];
}
}
L->length--;
return success;
}
线性表顺序存储结构的优缺点:
优点:1.无须为表示表中元素之间的逻辑关系而增加额外的存储空间
2.可以快速的存取表中任意位置的元素
缺点:1.插入和删除操作需要移动大量元素
2.当线性表长度变化较大时,难以确定存储空间的容量
3.造成存储空间的“碎片”