【备战春招】第16天 嵌入式工程师学习笔记
课程信息
- 课程名称:物联网/嵌入式工程师
- 章节名称:第5周之第二讲 1-5 单向链表之判空,删除
- 讲师姓名:大白老师
课程内容概述
1. 简介
本节介绍了C语言中的单向链表之判空,删除。
2. 链表图形操作
- 创建
-
插入
- 头插法:每次都在头结点head后插入temp结点。
- 尾插法: 每次都在尾结点后插入temp结点
- 有序插入:按照指定顺序插入
3. 代码示例
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef int datatype_t;
typedef struct node {
int data;
struct node *next;
} linknode_t;
// 创建
linknode_t *create_empty_linklist() {
linknode_t *head = malloc(sizeof(linknode_t));
if (NULL == head) {
printf("malloc fail!\n");
return NULL;
}
memset(head, 0, sizeof(linknode_t));
return head;
}
// 头插法
void insert_head_linklist(linknode_t *head, datatype_t data) {
if (NULL == head) {
printf("head is NULL point!\n");
return;
}
linknode_t *temp = malloc(sizeof(linknode_t));
if (NULL == temp) {
printf("malloc fail!\n");
return;
}
temp->data = data;
temp->next = head->next;
head->next = temp;
return;
}
// 尾插法
void insert_tail_linklist(linknode_t *head, datatype_t data) {
if (NULL == head) {
printf("head is NULL point!\n");
return;
}
linknode_t *temp = malloc(sizeof(linknode_t));
if (NULL == temp) {
printf("malloc fail!\n");
return;
}
temp->data = data;
linknode_t *p = head;
while (p->next != NULL) {
p = p->next;
}
temp->next = p->next;
p->next = temp;
return;
}
// 有序插入 大到小的顺序
void insert_order_linklist(linknode_t *head, datatype_t data) {
if (NULL == head) {
printf("head is NULL point!\n");
return;
}
linknode_t *temp = malloc(sizeof(linknode_t));
if (NULL == temp) {
printf("malloc fail!\n");
return;
}
temp->data = data;
linknode_t *p = head;
while (p->next != NULL && temp->data < p->next->data) {
p = p->next;
}
temp->next = p->next;
p->next = temp;
return;
}
// 输出
void printf_data_linklist(linknode_t *head) {
if (NULL == head) {
printf("head is NULL point!\n");
return;
}
linknode_t *p = head;
while (p->next != NULL) {
printf("%d ", p->next->data);
p = p->next;
}
printf("\n");
return;
}
int main() {
linknode_t *head = NULL;
int n = 5;
datatype_t data[5] = {1, 5, 3, 7, 9};
head = create_empty_linklist();
// printf("Please input five number: \n");
for (int i = 0; i < 5; i++) {
insert_order_linklist(head, data[i]);
}
printf_data_linklist(head);
return 0;
}
运行结果
9 7 5 3 1
学习心得
C语言中的数据结构,实践练习了单向链表之创建,插入,输出,感觉很有收获。