/*
********************************************************************************
*
* 作者:zhi-z
*
* QQ号:2282643301
*
********************************************************************************
*文件名 :
*作用 : 线性表的基本操作
*原理 :
*内容 : 数据结构线性表操作,初始化,添加元素,删除元素等
*
*
********************************************************************************
*版本 作者 日期 说明
*V0.1 2016-9-24 初始版本
********************************************************************************
*/
/********************************************************************************
*函数名 : SeqListInit
*参数 :*SL :一个顺序表类型的指针地址
*作用 : 初始化线性表
*内容 :
*
********************************************************************************/
void SeqListInit(SeqListType *SL) //初始化顺序表
{
SL->ListLen=0; //初始化时,设置顺序表长度为0
}
/********************************************************************************
*函数名 : SeqListLength
*参数 :*SL:一个顺序表类型的指针地址
*作用 : 返回顺序表的长度
*内容 :
*
********************************************************************************/
int SeqListLength(SeqListType *SL) //返回顺序表的元素数量
{
return (SL->ListLen);
}
/********************************************************************************
*函数名 : SeqListAdd
*参数 :*SL:一个顺序表类型的指针地址 、data:要增加的数据
*作用 : 增加元素到顺序表尾部
*内容 :
*
********************************************************************************/
int SeqListAdd(SeqListType *SL,DATA data) //增加元素到顺序表尾部
{
if(SL->ListLen>=MAXSIZE) //顺序表已满
{
printf("顺序表已满,不能再添加结点了!\n");
return 0;
}
SL->ListData[++SL->ListLen]=data; //++i是先执行加1后再执行
return 1;
}
/********************************************************************************
*函数名 : SeqListInsert
*参数 :*SL:一个顺序表类型的指针地址 、n:插入节点的位置、data:要插入的数据的位置
*作用 : 插入节点到顺序表
*内容 :
*
********************************************************************************/
int SeqListInsert(SeqListType *SL,int n,DATA data)
{
int i;
if(SL->ListLen>=MAXSIZE) //顺序表结点数量已超过最大数量
{
printf("顺序表已满,不能插入结点!\n");
return 0; //返回0表示插入不成功
}
if(n<1 || n>SL->ListLen-1) //插入结点序号不正确
{
printf("插入元素序号错误,不能插入元素!\n");
return 0; //返回0,表示插入不成功
}
for(i=SL->ListLen;i>=n;i--) //将顺序表中的数据向后移动
SL->ListData[i+1]=SL->ListData[i];
SL->ListData[n]=data; //插入结点
SL->ListLen++; //顺序表结点数量增加1
return 1; //返回成功插入
}
/********************************************************************************
*函数名 : SeqListDelete
*参数 :*SL:一个顺序表类型的指针地址 、n:要删除的数据的位置
*作用 : 删除顺序表中的数据元素
*内容 :
*
********************************************************************************/
int SeqListDelete(SeqListType *SL,int n) //删除顺序表中的数据元素
{
int i;
if(n<1 || n>SL->ListLen+1) //删除元素序号不正确
{
printf("删除结点序号错误,不能删除结点!\n");
return 0; //返回0,表示删除不成功
}
for(i=n;i<SL->ListLen;i++) //将顺序表中的数据向前移动
SL->ListData[i]=SL->ListData[i+1];
SL->ListLen--; //顺序表元素数量减1
return 1; //返回成功删除
}
/********************************************************************************
*函数名 : SeqListFindByNum
*参数 :*SL:一个顺序表类型的指针地址 、n:要查找数据的位置
*作用 : 根据序号返回数据元素
*内容 :
*
********************************************************************************/
DATA *SeqListFindByNum(SeqListType *SL,int n) //根据序号返回数据元素
{
if(n<1 || n>SL->ListLen+1) //元素序号不正确
{
printf("结点序号错误,不能返回结点!\n");
return NULL; //返回0,表示不成功
}
return &(SL->ListData[n]);
}
/********************************************************************************
*函数名 : SeqListFindByCont
*参数 :*SL:一个顺序表类型的指针地址 、key:要查找的关键字
*作用 : 按关键字查询结点
*内容 :
*
********************************************************************************/
int SeqListFindByCont(SeqListType *SL,char *key) //按关键字查询结点
{
int i;
for(i=1;i<=SL->ListLen;i++)
if(strcmp(SL->ListData[i].key,key)==0) //如果找到所需结点
return i; //返回结点序号
return 0; //遍历后仍没有找到,则返回0
}
数据结构之线性表(C语言实现)
最新推荐文章于 2024-08-31 20:17:42 发布