顺序表

来源:互联网 发布:陕西知含监理公司 编辑:程序博客网 时间:2024/06/10 09:22
#include <stdio.h>#include <string.h>#define MAXLEN 100  //定义顺序表的最大长度typedef struct{    char key[10];   //节点的关键字    char name[20];    int age;}DATA;              //定义节点类型typedef struct      //定义顺序表结构{    DATA ListData[MAXLEN+1];//保存顺序表的结构数组    int ListLen;//顺序表已存节点的数量}SLType;void SLInit(SLType *SL)//初始化顺序表{    SL->ListLen=0;//初始化为空表}int SLLength(SLType *SL){    return (SL->ListLen);//返回顺序表的元素数量}int SLInsert(SLType *SL,int n,DATA data){    int i;    if(SL->ListLen>=MAXLEN)//顺序表节点数量已超过最大数量    {        printf("顺序表已满,不能插入节点!\n");        return 0;    }    if(n<1||n>SL->ListLen-1)//插入节点序号不正确    {        printf("插入元素序号错误,不能插入元素!\n");        return 0;    }    for(i=SL->ListLen;i>=n;i--)//将顺序表中的数据向后移动    {        SL->ListData[i+1]=SL->ListData[i];    }    SL->ListData[n]=data;//插入节点    SL->ListLen++;//顺序表节点数量增加1    return 1;//成功插入返回1}int SLAdd(SLType *SL,DATA data)//增加元素到顺序表尾部{    if(SL->ListLen>=MAXLEN)//顺序表已满    {        printf("顺序表已满,不能再添加节点了!\n");        return 0;    }    SL->ListData[++SL->ListLen]=data;    return 1;}int SLDelete(SLType *SL,int n)//删除顺序表中的数据元素{    int i;    if(n<1||n>SL->ListLen+1)    {        printf("删除节点序号错误,不能删除节点!\n");        return 0;    }    for(i=n;i<SL->ListLen;i++)    {        SL->ListData[i]=SL->ListData[i+1];    }    SL->ListLen--;//顺序表元素数量减1    return 1;}DATA *SLFindByNum(SLType *SL,int n)//根据序号,返回数据元素{    if(n<1||n>SL->ListLen+1)    {        printf("节点序号错误,不能返回节点!\n");        return NULL;    }    return &(SL->ListData[n]);}int SLFindByCont(SLType *SL,char *key)//按关键字查询节点{    int i;    for(i=1;i<=SL->ListLen;i++)    {        if(strcmp(SL->ListData[i].key,key)==0)        {            return i;//返回节点序号        }    }    return 0;}int SLAll(SLType *SL)//显示顺序表中的所有节点{    int i;    for(i=1;i<=SL->ListLen;i++)    {        printf("(%s,%s,%d)\n",SL->ListData[i].key,SL->ListData[i].name,SL->ListData[i].age);    }    return 0;}int main(){    int i;    SLType SL;//定义顺序表变量    DATA data;//定义节点保存数据类型变量    DATA *pdata;//定义节点保存指针变量    char key[10];//保存关键字    printf("顺序表操作演示!\n");    SLInit(&SL);//初始化顺序表    printf("初始化顺序表完成!\n");    do                  //循环添加节点数据    {        printf("输入添加的节点(学号 姓名 年龄):");        fflush(stdin);//清空输入缓冲区        scanf("%s%s%d",&data.key,&data.name,&data.age);        if(data.age)//若年龄不为0        {            if(!SLAdd(&SL,data))//若添加节点失败            {                break;            }        }        else//若年龄为0        {            break;        }    }while(1);    printf("\n顺序表中的节点数序为:\n");    SLAll(&SL);//显示所有节点数据    fflush(stdin);    printf("\n输入要取出节点的序号:");    scanf("%d",&i);//输入节点序号    pdata=SLFindByNum(&SL,i);//按序号查找节点    if(pdata)//若返回的节点指针不为NULL    {        printf("第%d个节点为:(%s,%s,%d)\n",i,pdata->key,pdata->name,pdata->age);    }    fflush(stdin);    printf("\n要查找的节点的关键字:");    scanf("%s",key);    i=SLFindByCont(&SL,key);//按关键字查找,返回节点序号    pdata=SLFindByNum(&SL,i);//按序号查询,返回节点指针    if(pdata)//若节点指针不为NULL    {        printf("第%d个节点为:(%s,%s,%d)\n",i,pdata->key,pdata->name,pdata->age);    }    getch();    return 0;}

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 80岁老太太就爱闹肚子怎么办? 皇牌空战5弹药不够怎么办 辐射4玩着头晕怎么办 官司打赢了法院不给钱怎么办 电脑玩dnf太卡怎么办 soul被禁止私聊怎么办 刺激战场空投挂树上怎么办 由于经济原因心态不好怎么办 公司经济不好不裁员怎么办 家里经济不好没有钱怎么办 银行柜员找不到工作怎么办 在球队中打替补怎么办 大学生毕业后找不到工作怎么办 30岁不敢换工作怎么办 投完简历没回复怎么办 工业废气一年总量超标怎么办 安监局行政处罚没能力交怎么办 被社会淘汰的人怎么办 宝宝吐奶的时候怎么办 网友要我发红包怎么办 电脑久了很慢怎么办 影驰显卡花屏怎么办 反恐精英全球攻势加载地图慢怎么办 老滚5视角锁死了怎么办 苹果描述文件没有了怎么办 苹果6s发热严重怎么办 苹果6s发烫严重怎么办 手机型号不适配全军出击怎么办? 苹果5版本过低怎么办 在泰国买到假货怎么办 在泰国旅游遇到危险该怎么办? 拾到小米手环怎么办 苹果充电打游戏触点怎么办 衣服上金属锈了怎么办 光之子门锁住了怎么办 挖到金矿石了该怎么办 邻居是精神病扔石头怎么办 汽车保养手册丢了怎么办 五号电池没电了怎么办 电脑打印时显示脱机怎么办 博新计划两年后怎么办