项目名称 | 【苏嵌实训-嵌入式 linux C 第 8 天】 |
今日进度以及任务 | 链表:列表的创建,增删改查 1.题目:创建两个学生链表,含有姓名、年龄的信息,一个链表存放男生,一个链表存放女生。
2.题目:将上面两个链表合并,按学生的年龄进行排序,合 成新的链表.
3.题目:将上题中建立的链表进行反转,实现按年龄的逆序排列
4.题目:在上面的实现的新链表中,给定一个年龄,迅速查找和该学生年龄最接近的学生姓名。 |
本日任务完成情况 (详细说明本日任务是否按计划完成,开发的代码量) | #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX sizeof(char) * 20 enum RESULT { RANK_FAIL, RANK_SUCCESS, Reverse_fail, Reverse_success, Search_fail, Search_success }; /****定义结构体******/ struct students { char * name; char sex; int age; struct students *next; }; typedef struct students Student; typedef Student * STU; /*****初始化头指针*******/ void init_head(STU *head) { *head = (STU)malloc(sizeof(Student)); (*head)->next = NULL; } /******链表尾插入函数*******/ void insert_tail(STU newstudent,STU *head) { STU temp = *head; while(temp->next != NULL) { temp = temp->next; } temp->next = newstudent; newstudent->next = NULL; } /******年龄排序函数********/ int rank_age(STU *head) { int i; int j; int n; int count = 0; STU p = *head; STU s = p->next; STU t = s->next; #if 1 if(((*head)->next == NULL) || ((*head)->next->next == NULL)) { return RANK_FAIL; } else { #endif STU temp = (*head)->next; while(temp != NULL) { count++; temp = temp->next; } n = count - 1; for(i = 0;i < n;i++) { for(j = 0;j < (n - i);j++) { if(s->age > t->age) { p->next = t; s->next = t->next; t->next = s; s = t; t = p->next->next; } t = t->next; s = s->next; p = p->next; } p = *head; s = p->next; t = s->next; } return RANK_SUCCESS; } } /***逆序链表***/ #if 1 int reverse(STU *head) { if(((*head)->next == NULL) || ((*head)->next->next == NULL)) { return Reverse_fail; } else { STU p = (*head)->next; STU s = p->next; STU t = s->next; while(t != NULL) { s->next = p; p = s; s = t; t = t->next; } s->next = p; (*head)->next->next = NULL; (*head)->next = s; return Reverse_success; } } #endif /*****寻找最近年龄*******/ int search_age(STU *head,STU *head1,int age) { int min; int MIN = 100;
STU temp = (*head)->next; STU t = (*head)->next;
if((*head)->next == NULL) { return Search_fail; } else { while(temp != NULL) { if(((temp->age) - age) >= 0) { min = (temp->age) - age; } else { min = age - (temp->age); } if(min <= MIN) { MIN = min; } temp = temp->next; } printf("与所查年龄相差 %d 岁\n",MIN); while(t != NULL) { if(((t->age) - age) >= 0) { min = (t->age) - age; } else { min = age - (t->age); } if(min == MIN) { STU find_stu = (STU)malloc(sizeof(Student)); find_stu->name = t->name; find_stu->sex = t->sex; find_stu->age = t->age; insert_tail(find_stu,&(*head1)); } t = t->next; } return Search_success; } } /******显示函数*******/ void display(STU head,char sex) { STU temp = head->next; printf(" 姓名 性别 年龄 \n"); if(sex == 'a') { while(temp != NULL) { printf("%10s",temp->name); printf("%10c",temp->sex); printf("%10d\n",temp->age); temp = temp->next; } } else { while(temp != NULL) { if(temp->sex == sex) { printf("%10s",temp->name); printf("%10c",temp->sex); printf("%10d\n",temp->age); } temp = temp->next; } } } int main() { int i; int age; int num; int function; int count; int rank_result; int reverse_result; int search_result; STU head; init_head(&head); STU head1; init_head(&head1); #if 1 STU stu1 = (STU)malloc(sizeof(Student)); stu1->name = "Curley G"; stu1->sex = 'g'; stu1->age = 22; insert_tail(stu1,&head); STU stu2 = (STU)malloc(sizeof(Student)); stu2->name = "Akira"; stu2->sex = 'b'; stu2->age = 25; insert_tail(stu2,&head); STU stu3 = (STU)malloc(sizeof(Student)); stu3->name = "WangYiJin"; stu3->sex = 'g'; stu3->age = 25; insert_tail(stu3,&head); STU stu4 = (STU)malloc(sizeof(Student)); stu4->name = "ChenZhuoXuan"; stu4->sex = 'g'; stu4->age = 23; insert_tail(stu4,&head); STU stu5 = (STU)malloc(sizeof(Student)); stu5->name = "Nene"; stu5->sex = 'b'; stu5->age = 23; insert_tail(stu5,&head); STU stu6 = (STU)malloc(sizeof(Student)); stu6->name = "Sally"; stu6->sex = 'b'; stu6->age = 24; insert_tail(stu6,&head); #endif printf("\0"); while(1) { printf("*********学生管理系统**********\n"); printf("** 创建男生链表(1) **\n"); printf("** 创建女生链表(2) **\n"); printf("** 按年龄排序(3) **\n"); printf("** 按年龄逆序(4) **\n"); printf("** 查找年龄学生(5) **\n"); printf("** 退出(0) **\n"); printf("*******************************\n"); printf("\n"); printf("请输入你想要的操作\n"); scanf("%d",&function); switch(function) { case 1: { printf("\0"); printf("您需要输入几个男学生的信息?\n"); scanf("%d",&num); for(i = 0;i < num;i++) { STU newstudent = (STU)malloc(sizeof(Student)); newstudent->sex = 'b'; printf("请输入学生 %d 姓名\n",i + 1); newstudent->name = (char *)malloc(MAX); scanf("%s",(newstudent->name)); printf("请输入学生 %d 年龄\n",i + 1); scanf("%d",&(newstudent->age)); insert_tail(newstudent,&head); } printf("\0"); printf("/**********男生信息**********/\n"); printf("\n"); display(head,'b'); printf("\n"); printf("\n"); printf("\n"); break; }
case 2: { printf("\0"); printf("您需要输入几个女学生的信息?\n"); scanf("%d",&num); for(i = 0;i < num;i++) { STU newstudent = (STU)malloc(sizeof(Student)); newstudent->sex = 'g'; printf("请输入学生 %d 姓名\n",i + 1); newstudent->name = (char *)malloc(sizeof(char) * 20); scanf("%s",newstudent->name); printf("请输入学生 %d 年龄\n",i + 1); scanf("%d",&(newstudent->age)); insert_tail(newstudent,&head); } printf("\0"); printf("/**********女生信息**********/\n"); printf("\n"); display(head,'g'); printf("\n"); printf("\n"); printf("\n"); break; } case 3: { printf("\0"); printf("/*******排序结果为(由大到小)*******/\n"); printf("\n"); rank_result = rank_age(&head); if(rank_result == RANK_FAIL) { printf("只有一个学生或者没有学生;故无法排序!\n"); } if(rank_result == RANK_SUCCESS) { display(head,'a'); } printf("\n"); printf("\n"); printf("\n"); break; }
case 4: { printf("\0"); printf("/**********逆序结果**********/\n"); printf("\n"); reverse_result = reverse(&head); if(reverse_result == Reverse_fail) { printf("只有一个学生或者没有学生数据;无法逆序!\n"); } if(reverse_result == Reverse_success) { display(head,'a'); } printf("\n"); printf("\n"); printf("\n"); break; } case 5: { printf("\0"); printf("请输入要找的年龄:\n"); scanf("%d",&age); printf("/**********查找结果**********/\n"); printf("\n"); search_result = search_age(&head,&head1,age); if(search_result == Search_fail) { printf("没有学生数据,无法查找!\n"); } printf("\n"); if(search_result == Search_success) { display(head1,'a'); } head1->next = NULL; printf("\n"); printf("\n"); printf("\n"); break; } case 0: { printf("\0"); printf("已成功退出!使用愉快!\n"); return 0; } default: { printf("\0"); printf("输入错误,清重新输入!\n"); printf("\n"); printf("\n"); printf("\n"); break; } } } return 0; }
|
本日开发中出现的问题汇总 | 无 |
本日未解决问题 | 无 |
本日开发收获 | 加强了链表的相关知识。 |
其他 | 今后也要认真学习 |
苏嵌实训-嵌入式 linux C 第 8 天
最新推荐文章于 2023-03-29 12:49:50 发布
本次实训聚焦于嵌入式Linux环境下的C语言编程,通过深入浅出的讲解和实践,提升学员在该领域的技能。课程内容涵盖基础理论、实践操作及疑难问题解析,旨在帮助学员掌握嵌入式Linux系统下的高效编程技巧。
摘要由CSDN通过智能技术生成