基于visual Studio2013解决C语言竞赛题之0810链表去重
题目
解决代码及点评
/************************************************************************/ /* 10. 建立一个链表,每个结点包括:学号、姓名、性别、年龄。输入一个年龄, 如果链表中的结点所包含的年龄等于此年龄,将此结点删除,输出最后的链表。 */ /************************************************************************/ #include <stdio.h> #include <stdlib.h> #include <math.h> #include <string.h> typedef struct student STU; struct student // 保存学生信息的节点结构体 { int num; char name[10]; int age; int sex; struct student * next; }; STU * Init10() // 初始化链表 { STU * p=(STU *)malloc(sizeof(STU)); // 初始化链表时,创建了一个头节点,该节点信息无意义 if (p==NULL) // 如果内存申请失败,则 { return NULL; } else p->next=NULL; return p; // 返回创建的头结点 } void Insert10(STU * head,int num,int aeg,int sex,char * name) // 将新学生信息插入链表 { STU * last=head; if (last==NULL) { return; } while(last->next!=NULL) // 找到最后一个节点 last=last->next; STU *p=(STU *)malloc(sizeof(STU)); // 申请新节点空间 if (p==NULL) { return; } else { p->num=num; // 初始化新节点 strcpy_s(p->name,name); p->age=aeg; p->sex=sex; last->next=p; // 把新节点保存在链表最后 p->next=NULL; } } void DeleteNode10(STU* pre,STU *cur) { pre->next=cur->next; // 删除cur节点,pre是cur的前置节点 free(cur); } void printfNodes10(STU *head) // 该函数遍历所有node,进行打印输出 { STU *p=head->next; while(p!=NULL) { printf("%5d",p->age); p=p->next; } printf("\n"); } void main() { int num; scanf_s("%d",&num); // 输入 STU * A=Init10(); // 初始化链表,并插入一堆数据 Insert10(A,1,12,1,"abc"); Insert10(A,2,13,0,"abc"); Insert10(A,3,14,1,"abc"); Insert10(A,3,14,0,"abc"); Insert10(A,4,15,1,"abc"); printfNodes10(A); STU * index=A->next; STU * flower=A; while(index!=NULL) // 遍历所有节点 { if (index->age==num) // 如果节点的年纪是指定需要删除的年纪 { DeleteNode10(flower,index); // 删除该节点 index=flower->next; // 继续遍历 } else { index=index->next; // 只是继续遍历 flower=flower->next; } } printfNodes10(A); // 输出新的链表 system("pause"); }
代码编译以及运行
由于资源上传太多,资源频道经常被锁定无法上传资源,同学们可以打开VS2013自己创建工程,步骤如下:
1)新建工程
2)选择工程
3)创建完工程如下图:
4)增加文件,右键点击项目
5)在弹出菜单里做以下选择
6)添加文件
7)拷贝代码与运行
程序运行结果