基于visual Studio2013解决C语言竞赛题之0810链表去重

来源:互联网 发布:手机淘宝分类在哪里 编辑:程序博客网 时间:2024/04/29 20:32



题目


解决代码及点评

/************************************************************************//* 10.建立一个链表,每个结点包括:学号、姓名、性别、年龄。输入一个年龄,如果链表中的结点所包含的年龄等于此年龄,将此结点删除,输出最后的链表。  *//************************************************************************/#include <stdio.h>#include <stdlib.h>#include <math.h>#include <string.h>typedef structstudent 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;}elsep->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;}}voidDeleteNode10(STU* pre,STU *cur){pre->next=cur->next;   // 删除cur节点,pre是cur的前置节点free(cur);}voidprintfNodes10(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)拷贝代码与运行


程序运行结果





原创粉丝点击