根据题意:
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//定义一个体育项目结构类型
{
xa0 xa0 int id;//项目序号,从数据结构考虑,该项不能重复,应设为自增从0开始(实际开发,这个值由数据库分配)。
xa0 xa0 char name[MN+1];//项目名称
xa0 xa0 int stype;//项目类(对应stypes行下标)
xa0 xa0 int n;//参赛人数
xa0 xa0 struct tm sDate;//竞赛时间
xa0 xa0 struct SportsItemInfo *next;
}SIINFO;
SIINFO *insert2List(SIINFO *p_sHead);//插入新数据,首次插入参数传NULL。参数:链表头节点地址(不是首节点)。成功返回头节点,失败返回NULL。
void selectFList(SIINFO *p_sHead);//查询链表
int main()
{
xa0 xa0 char c;
xa0 xa0 SIINFO *p_sHead=NULL,*stemp=NULL;
xa0 xa0 printf("新增体育项目:\n");
xa0 xa0 while(1)
xa0 xa0 {
xa0 xa0 xa0 xa0 stemp=insert2List(p_sHead);
xa0 xa0 xa0 xa0 if(!stemp)
xa0 xa0 xa0 xa0 {
xa0 xa0 xa0 xa0 xa0 xa0 printf("ERROR!\n");
xa0 xa0 xa0 xa0 xa0 xa0 return 1;
xa0 xa0 xa0 xa0 }
xa0 xa0 xa0 xa0 p_sHead=stemp;
xa0 xa0 xa0 xa0 printf("是否继续输入(Y/N):");
xa0 xa0 xa0 xa0 c=0;
xa0 xa0 xa0 xa0 while(c!='Y' && c!='N')scanf("%c",&c);
xa0 xa0 xa0 xa0 if(c=='N') break;
xa0 xa0 }
xa0 xa0 selectFList(p_sHead);
xa0 xa0 return 0;
}
void selectFList(SIINFO *pht)
{
xa0 xa0 int i=0;
xa0 xa0 if(pht)
xa0 xa0 {
xa0 xa0 xa0 xa0 printf("\n输出链表信息:\n");
xa0 xa0 xa0 xa0 while(pht->next)
xa0 xa0 xa0 xa0 {
xa0 xa0 xa0 xa0 xa0 xa0 printf("-----------项目%d---------\n",++i);
xa0 xa0 xa0 xa0 xa0 xa0 printf("项目序号:%d\n",pht->next->id);
xa0 xa0 xa0 xa0 xa0 xa0 printf("项目名称:%s\n",pht->next->name);
xa0 xa0 xa0 xa0 xa0 xa0 printf("项目类别:%s\n",stypes[pht->next->stype]);
xa0 xa0 xa0 xa0 xa0 xa0 printf("参赛人数:%d\n",pht->next->n);
xa0 xa0 xa0 xa0 xa0 xa0 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);
xa0 xa0 xa0 xa0 xa0 xa0 printf("--------------------------\n");
xa0 xa0 xa0 xa0 xa0 xa0 pht=pht->next;
xa0 xa0 xa0 xa0 }
xa0 xa0 }
}
SIINFO *insert2List(SIINFO *p_sHead)
{
xa0 xa0 static int x=0;
xa0 xa0 static SIINFO *p_sTail=NULL;
xa0 xa0 int i;
xa0 xa0 SIINFO *p_new=NULL;
xa0 xa0 if(!p_sHead){
xa0 xa0 xa0 xa0 p_sHead=(SIINFO*)malloc(sizeof(SIINFO));
xa0 xa0 xa0 xa0 if(!p_sHead)
xa0 xa0 xa0 xa0 xa0 xa0 return NULL;
xa0 xa0 xa0 xa0 p_sHead->next=NULL;
xa0 xa0 xa0 xa0 p_sTail=NULL;
xa0 xa0 }
xa0 xa0 p_new=(SIINFO*)malloc(sizeof(SIINFO));
xa0 xa0 if(!p_new)
xa0 xa0 xa0 xa0 return NULL;
xa0 xa0 p_new->next=NULL;
xa0 xa0 p_new->id=x++;
xa0 xa0 printf("--------------------------\n");
xa0 xa0 printf("项目名称:"),scanf("%s",p_new->name);
xa0 xa0 for(i=0,printf("项目类(");i<MS-1;printf("%d、%s,",i,stypes[i]),i++);
xa0 xa0 printf("%d、%s):",i,stypes[i]);
xa0 xa0 p_new->stype=-1;
xa0 xa0 while(p_new->stype<0 || p_new->stype>MS-1)scanf("%d",&p_new->stype);
xa0 xa0 printf("参赛人数:"),scanf("%d",&p_new->n);
xa0 xa0 printf("参赛时间(输入格式:年-月-日 时:分:秒):");
xa0 xa0 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);
xa0 xa0 p_new->sDate.tm_mon--;//tm结构的月份是从0开始对应1月
xa0 xa0 p_new->sDate.tm_year=p_new->sDate.tm_year-1900;//tm结构的年份是实际年份-1900
xa0 xa0 if(!p_sHead->next)
xa0 xa0 xa0 xa0 p_sHead->next=p_new;
xa0 xa0 else
xa0 xa0 xa0 xa0 p_sTail->next=p_new;
xa0 xa0 p_sTail=p_new;
xa0 xa0 printf("--------------------------\n");
xa0 xa0 return p_sHead;
}
©本文版权归作者所有,任何形式转载请联系我们:xiehuiyue@offercoming.com。