线性表的顺序存储结构
2016-07-26 15:00
411 查看
//线性表的顺序存储的结构代码
#define MAXSIZE 20 /*存储空间初始分配量*/
typedef int ElemType; /*ElemType 类型根据实际情况而定,这里假设为int,也可以为float,double等等*/
typedef struct
{
ElemType date[MASIZE]; /*数组存储数据元素,最大值为MAXSIZE*/
int length; /*线性表当前长度*/
}SqList;
//typedef 类型定义符 相当于取别名
//地址计算方法 LOC(ai)=LOC(a1)+(i-1)*c
//===============================================================
//获得元素操作
#define OK 1
#define ERROR 0
#define TRUE 1
#define FAlSE 0
typedef int Status;
/*Status 是函数的类型,其值是函数结果状态代码 如OK等*/
/*初始条件:顺序线性表已经存在,1<=i<=ListLength(L)*/
/*操作结果:用e返回L中第i个数据元素的值*/
Status GetElem(SqList L,int i,ElemType *e)
{
if(L.length==0||i<1||i>L.length)//空表或得到的元素非法
return ERROR;
*e=L.date[i-1];//注意线性表从1开始,而数组从0开始
return OK;
}
//=================================================================
//=================================================================
//插入操作
/*初始条件:顺序线性表已经存在,1<=i<=ListLength(L)*/
/*操作结果:在L中第i位置之前插入新的数据元素e,L的长度加1*/
Status ListInsert(SqList *L,int i,ElemTyped e)
{
int k;
if(L->Length==MAXSIZE) /*顺序线性表已经满*/
return ERROR;
if(i<1||i>L->length+1)/*当i不在范围时 此处为length+1是因为你要插入一个元素length会加1的 你可能插入的位置为length+1处即插入到最后*/
return ERROR;
if(i<=L->length) /*若插入位置不在表尾*/
{
for(k=L->length-1;k>=i-1;k--)/*还是一样顺序线性表从1开始 数组从0开始*/
{
L->date[k+1]=L->date[k]; /*将要插入位置后面的元素往后移动一位*/
}
}
L->date[i-1]=e;/*插入新元素*/
L->length++;
return OK;
}
//==================================================================
//==================================================================
//删除操作
/*初始条件:顺序线性表已经存在,1<=i<=ListLength(L)*/
/*操作结果:删除L的第i个数据元素,并用e返回其值,L的长度减1*/
Status ListDelete(SqList *L,int i,ElemType *e)
{
int k;
if(L->length==0) /*线性表为空*/
return ERROE;
if(i<1||i>Length) /*删除位置不正确*/
return ERROR;
*e=L->date[i-1]; /*e返回被删除的元素*/
if(i<L->length) /*如果删除的不是最后位置*/
{
for(k=i;k<L->length;k++) /*还是一样顺序线性表从1开始 数组从0开始*/
{
L->date[k-1]=L->date[k];/*将要删除位置后面的元素往前移动一位*/
}
}
L->length--;
return OK;
}
//====================================================================
线性表顺序存储结构的优缺点
》优点
1,无需为表示表中元素之间的逻辑关系而增加额外的存储空间
2,可以快速的存取表中任一位置的元素
》缺点
1,插入和删除操作需要移动大量元素
2,当线性表长度变化较大时,难以确定存储空间的容量
3,造成存储空间的“碎片”
#define MAXSIZE 20 /*存储空间初始分配量*/
typedef int ElemType; /*ElemType 类型根据实际情况而定,这里假设为int,也可以为float,double等等*/
typedef struct
{
ElemType date[MASIZE]; /*数组存储数据元素,最大值为MAXSIZE*/
int length; /*线性表当前长度*/
}SqList;
//typedef 类型定义符 相当于取别名
//地址计算方法 LOC(ai)=LOC(a1)+(i-1)*c
//===============================================================
//获得元素操作
#define OK 1
#define ERROR 0
#define TRUE 1
#define FAlSE 0
typedef int Status;
/*Status 是函数的类型,其值是函数结果状态代码 如OK等*/
/*初始条件:顺序线性表已经存在,1<=i<=ListLength(L)*/
/*操作结果:用e返回L中第i个数据元素的值*/
Status GetElem(SqList L,int i,ElemType *e)
{
if(L.length==0||i<1||i>L.length)//空表或得到的元素非法
return ERROR;
*e=L.date[i-1];//注意线性表从1开始,而数组从0开始
return OK;
}
//=================================================================
//=================================================================
//插入操作
/*初始条件:顺序线性表已经存在,1<=i<=ListLength(L)*/
/*操作结果:在L中第i位置之前插入新的数据元素e,L的长度加1*/
Status ListInsert(SqList *L,int i,ElemTyped e)
{
int k;
if(L->Length==MAXSIZE) /*顺序线性表已经满*/
return ERROR;
if(i<1||i>L->length+1)/*当i不在范围时 此处为length+1是因为你要插入一个元素length会加1的 你可能插入的位置为length+1处即插入到最后*/
return ERROR;
if(i<=L->length) /*若插入位置不在表尾*/
{
for(k=L->length-1;k>=i-1;k--)/*还是一样顺序线性表从1开始 数组从0开始*/
{
L->date[k+1]=L->date[k]; /*将要插入位置后面的元素往后移动一位*/
}
}
L->date[i-1]=e;/*插入新元素*/
L->length++;
return OK;
}
//==================================================================
//==================================================================
//删除操作
/*初始条件:顺序线性表已经存在,1<=i<=ListLength(L)*/
/*操作结果:删除L的第i个数据元素,并用e返回其值,L的长度减1*/
Status ListDelete(SqList *L,int i,ElemType *e)
{
int k;
if(L->length==0) /*线性表为空*/
return ERROE;
if(i<1||i>Length) /*删除位置不正确*/
return ERROR;
*e=L->date[i-1]; /*e返回被删除的元素*/
if(i<L->length) /*如果删除的不是最后位置*/
{
for(k=i;k<L->length;k++) /*还是一样顺序线性表从1开始 数组从0开始*/
{
L->date[k-1]=L->date[k];/*将要删除位置后面的元素往前移动一位*/
}
}
L->length--;
return OK;
}
//====================================================================
线性表顺序存储结构的优缺点
》优点
1,无需为表示表中元素之间的逻辑关系而增加额外的存储空间
2,可以快速的存取表中任一位置的元素
》缺点
1,插入和删除操作需要移动大量元素
2,当线性表长度变化较大时,难以确定存储空间的容量
3,造成存储空间的“碎片”
相关文章推荐
- 关于js动态插入script 标签后页面JS代码执行失败的解决方法
- history命令
- linux 内核与用户空间通信之netlink使用方法
- "mkimage" command not found - U-Boot images will not be built Image arch/arm/boot/uImage is ready
- Git 分布式版本管理系统
- 食物链
- 范德蒙矩阵求逆
- Unbuntu环境下安装Flask+Python+MySQL+Apache
- 千里之行始于足下
- hoj 4550 卡片游戏
- fl2440工作于STA模式
- net-snmp交叉编译时问题总结
- Sublime Text (神级文本编译器)使用技巧
- 这里有一份面经,请查收(2)
- Java imageIO处理图像
- 微信支付详情
- 对Java中File I/O的理解
- visio 2013 破解工具 - KMSpico
- maven中junit.runner.RunWith无法导入问题
- view 添加点击方法