【苏嵌实训-嵌入式 linux C 第 6天】

项目名称 【苏嵌实训-嵌入式 linux C 第 6天】
今日进度以及任务 嵌入式C实战详解1 - 单链表
本日任务完成情况 作业及笔记见表格下方。
本日开发中出现的问题汇总
本日未解决问题
本日开发收获 学习了带头结点和不带头结点的单链表的创建、插入(头插入、尾插入、中间插入)、删除、查找
其他

作业:

1、创建两个学生链表、含有姓名、年龄的信息,一个链表存放男生,一个链表存放女生
2、将上面两个链表合并,按学生的年龄进行排序,合成新的链表
3、将上题中 建立的链表进行反转,实现按年龄的逆序排列
4、在上面的实现的新链表中,给定一个年龄 ,迅速查找和该学生年龄最接近的学生姓名。

#include "stdio.h"
#include "stdlib.h"
#include "string.h"

typedef struct student
{
    
    
	char name[20];
	int age;
	struct student *next;
};

typedef struct  student student;
typedef student * Link;

void create_link(Link *head)
{
    
    
	*head = NULL;
}

void insert_head_node(Link newnode,Link *head)
{
    
    
	newnode->next = *head;
	*head = newnode;
}

//初始化链表信息
void init_student(char *a,int age,Link *head)
{
    
    
	Link newnode = (Link )malloc(sizeof(student));
	strcpy(newnode->name,a);
	newnode->age = age;
	insert_head_node(newnode,&(*head));
}

//打印链表
void display_link(Link head)
{
    
    
	Link temp = head;
	while(temp != NULL)
	{
    
    
		printf("name = %s\tage = %d\n",temp->name,temp->age);
		temp = temp->next;
	}
}

//合并链表,并按年龄排序
Link merge(Link head_gril ,Link head_boy)
{
    
    
	Link temp_gril = head_gril;
	Link temp_boy = head_boy;
    if(temp_gril == NULL){
    
    
        return temp_boy;
    }
    if(temp_boy == NULL){
    
    
        return temp_gril;
    }
    if(temp_gril->age < temp_boy->age){
    
    
        temp_gril->next = merge(temp_gril->next,temp_boy);
        return temp_gril;
    }
    else{
    
    
        temp_boy->next = merge(temp_gril,temp_boy->next);
        return temp_boy;
    }
}

//反转链表
Link reverse(Link head)
{
    
    
	Link p;
    Link res = NULL;
	Link temp = head;

    while(temp){
    
    
        p = temp->next;
        temp->next = res;
        res = temp;
        temp = p;
    }
    return res;
}

//查找链表
void search(Link head,int age)
{
    
    
	Link temp = head;
	int age_1;
	int age_2;
	
	while(temp->next != NULL)
	{
    
    
		if(temp->age >= age && temp->next->age <= age)
		{
    
    
			age_1 = abs(temp->age - age);
			age_2 = abs(temp->next->age - age);
			if(age_1 <= age_2)
			{
    
    
				printf("name = %s ",temp->name);
				break;
			}
			else
			{
    
    
				printf("name = %s ",temp->next->name);
				break;
			}
		}	
		temp = temp->next;
	}
}

int main(int argc,char *argv[])
{
    
    
	int i = 0;

	Link head_girl;
	Link head_boy;
	Link res = NULL;

	create_link(&head_girl);
	create_link(&head_boy);
	if(NULL == head_girl || NULL == head_boy)
	{
    
    
		printf("init link success!\n");
	}
	else
	{
    
    
		printf("init link failed!\n");
	}
	
	//初始化链表信息
	init_student("girl_1",22,&head_girl);
	init_student("girl_2",18,&head_girl);
	init_student("girl_3",14,&head_girl);
	init_student("boy_1",20,&head_boy);
	init_student("boy_2",16,&head_boy);
	init_student("boy_3",12,&head_boy);
	
	//打印链表
	printf("Link_girl:\n");
	display_link(head_girl);
	printf("Link_boy:\n");
	display_link(head_boy);
	printf("\n\n");

	//合并链表
	res = merge(head_girl,head_boy);
	printf("Link_merge:\n");
	display_link(res);
	printf("\n\n");

	//反转链表
	res = reverse(res);
	printf("Link_reverse:\n");
	display_link(res);
	printf("\n\n");

	//查找链表
	search(res,20);
	printf("\n\n");

	return 0;
}


在这里插入图片描述

Guess you like

Origin blog.csdn.net/weixin_43101257/article/details/107243085
Recommended