数据结构之线性表(C语言实现)

6 篇文章 0 订阅
5 篇文章 0 订阅
/*
********************************************************************************                          
*
*                               作者: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 
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值