线性表及其应用
1.1 线性表的逻辑结构
线性表(Linear list):由n个数据元素(结点)a1,a2,…,an组成的有序序列。其中数据元素n定义为表的长度。
线性表逻辑特征:
- 在非空的线性表中,有且仅有一个开始节点,它没有直接前驱,有且仅有一个直接后继a2。
- 有且仅有一个终端节点,它没有直接后继,而有且仅有一个直接前驱a(n-1).
- 其余的内部节点ai都有且仅有一个直接前驱和直接后继
- 线性表是一种典型的线性结构(一对一)
1.2线性表的存储结构
1.2.1顺序存储结构
顺序存储结构定义
用一组地址连续的存储单元,使得线性表中在逻辑结构中相邻的数据元素存储在相邻的物理存储中。采用这个方式存储的线性表称为顺序表。
顺序存储结构的C语言定义:
#define maxsize=100;//线性表可达的最大长度
typedef int Elemtype;
typedef struct
{
Elemtype elem[maxsize];
int last;/*记录线性表中最后一个元素在elem中的下标值,空表置为1*/
}SeqList;
基本运算
-
查找运算
查找分为按序号查找和按内容查找,按序号查找结果是**L.elem[i-1];按内容查找代码如下。
int locate(SeqList L,Elemtype e)
{
int i=0;
while((i<=L.last)&&l.elem[i]!=e)
{
i++;
}
if(i<=L.last) return i;
else return -1;
}
-
插入运算
线性表插入是指在含有n个元素的线性表中的第i个位置前插入一个元素,变成长度n+1的线性表。
int insert(SeqList *L,int i,Elemtype e)
/*位置i,第i-1个元素,数组下标i-1*/
{
int k;
if(i>L->last+1||i<1)
{
printf("插入位置不合理");
return -1;
}
if(L.last=Maxsize-1)
{
printf("线性表已经满了");
return -1;
}
for(k=L.last;k>=i-1;k--)
{
L->elem[k+1]=L->elem[k];
}
L->elem[i]=e;
L->last++;
return 1;
}