c语言程序解答(在线等)?

建立一个体育项目记录链表,记录包括,项目序号,项目名称,项目类,参赛人数,竞赛时间... 建立一个体育项目记录链表,记录包括,项目序号,项目名称,项目类,参赛人数,竞赛时间 展开
 我来答
自我编程
2021-04-19 · 科技优质答主
自我编程
采纳数:1481 获赞数:4283

向TA提问 私信TA
展开全部

根据题意:

1、项目序号应为唯一值,用自增变量填充。

2、时间使用struct tm结构体(考虑如需时间运算,可使用相关函数)。

3、自定义结构类型SIINFO,分别实现插入链表和打印链表两个功能。

4、由于这个演示程序执行完就结束程序了。所以链表我没有写free释放内存,如你后期扩充代码,自己写释放(除程序结束,malloc申请内存不会自动释放)。

下面是演示代码:

#include <stdio.h>

#include <malloc.h>

#include <time.h>

#define MS 4//最大类型个数

#define MN 20//名称最大字符长度

char stypes[MS][10]={"速度型","力量型","耐力型","对抗型"};//项目类别,自行扩展,对应修改MS常量

typedef struct SportsItemInfo//定义一个体育项目结构类型

{

    int id;//项目序号,从数据结构考虑,该项不能重复,应设为自增从0开始(实际开发,这个值由数据库分配)。

    char name[MN+1];//项目名称

    int stype;//项目类(对应stypes行下标)

    int n;//参赛人数

    struct tm sDate;//竞赛时间

    struct SportsItemInfo *next;

}SIINFO;

SIINFO *insert2List(SIINFO *p_sHead);//插入新数据,首次插入参数传NULL。参数:链表头节点地址(不是首节点)。成功返回头节点,失败返回NULL。

void selectFList(SIINFO *p_sHead);//查询链表

int main()

{

    char c;

    SIINFO *p_sHead=NULL,*stemp=NULL;

    printf("新增体育项目:\n");

    while(1)

    {

        stemp=insert2List(p_sHead);

        if(!stemp)

        {

            printf("ERROR!\n");

            return 1;

        }

        p_sHead=stemp;

        printf("是否继续输入(Y/N):");

        c=0;

        while(c!='Y' && c!='N')scanf("%c",&c);

        if(c=='N') break;

    }

    selectFList(p_sHead);

    return 0;

}

void selectFList(SIINFO *pht)

{

    int i=0;

    if(pht)

    {

        printf("\n输出链表信息:\n");

        while(pht->next)

        {

            printf("-----------项目%d---------\n",++i);

            printf("项目序号:%d\n",pht->next->id);

            printf("项目名称:%s\n",pht->next->name);

            printf("项目类别:%s\n",stypes[pht->next->stype]);

            printf("参赛人数:%d\n",pht->next->n);

            printf("参赛时间:%04d-%02d-%02d %02d:%02d:%02d\n",pht->next->sDate.tm_year+1900,pht->next->sDate.tm_mon+1,pht->next->sDate.tm_mday,pht->next->sDate.tm_hour,pht->next->sDate.tm_min,pht->next->sDate.tm_sec);

            printf("--------------------------\n");

            pht=pht->next;

        }

    }

}

SIINFO *insert2List(SIINFO *p_sHead)

{

    static int x=0;

    static SIINFO *p_sTail=NULL;

    int i;

    SIINFO *p_new=NULL;

    if(!p_sHead){

        p_sHead=(SIINFO*)malloc(sizeof(SIINFO));

        if(!p_sHead)

            return NULL;

        p_sHead->next=NULL;

        p_sTail=NULL;

    }

    p_new=(SIINFO*)malloc(sizeof(SIINFO));

    if(!p_new)

        return NULL;

    p_new->next=NULL;

    p_new->id=x++;

    printf("--------------------------\n");

    printf("项目名称:"),scanf("%s",p_new->name);

    for(i=0,printf("项目类(");i<MS-1;printf("%d、%s,",i,stypes[i]),i++);

    printf("%d、%s):",i,stypes[i]);

    p_new->stype=-1;

    while(p_new->stype<0 || p_new->stype>MS-1)scanf("%d",&p_new->stype);

    printf("参赛人数:"),scanf("%d",&p_new->n);

    printf("参赛时间(输入格式:年-月-日 时:分:秒):");

    scanf("%d-%d-%d %d:%d:%d",&p_new->sDate.tm_year,&p_new->sDate.tm_mon,&p_new->sDate.tm_mday,&p_new->sDate.tm_hour,&p_new->sDate.tm_min,&p_new->sDate.tm_sec);

    p_new->sDate.tm_mon--;//tm结构的月份是从0开始对应1月

    p_new->sDate.tm_year=p_new->sDate.tm_year-1900;//tm结构的年份是实际年份-1900

    if(!p_sHead->next)

        p_sHead->next=p_new;

    else

        p_sTail->next=p_new;

    p_sTail=p_new;

    printf("--------------------------\n");

    return p_sHead;

}

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式