cjozGV 的学生作业:
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
typedef int datatype_a; //定义数据类型
typedef struct linknode{
datatype_a data; //数据域
struct linknode *next; //指针域
} linknode_t;
//1.创建一个新链表,为头节点在栈区分配空间
linknode_t *create_empty_linklist(){
//1.为头节点在堆区分配空间,用指针head保存
linknode_t *head = NULL;
head = (linknode_t *)malloc(sizeof(linknode_t));
//2.头节点的指针域为NULL
if (NULL == head){
printf("malloc is fail!\n");
return NULL;
}
memset(head,0, sizeof(linknode_t));
return head;
}
//2.有序插入从大到小
void insert_order_linklist(linknode_t *head,datatype_a data){
//1创建新节点
linknode_t *new_dode = NULL;
new_dode = (linknode_t *)malloc(sizeof(linknode_t));
if (NULL == new_dode){
printf("malloc is fail!\n");
return;
}
new_dode->data = data; //存储数据
//2.找到插入位置
linknode_t *p = head; //从头节点开始遍历
while (p->next != NULL && p->next->data > data){
p = p->next; //继续往后找
}
//3.插入新的节点
new_dode->next = p->next; //新节点指向p的下一个节点
p->next = new_dode; //p指向新节点
}
//3.打印链表中的数据
void printf_data_linklist(linknode_t *heda){
linknode_t *p = heda->next; //跳过头节点(头节点不存储数据)
printf("linked list (Descending) Order ");
while (p != NULL){
printf("%d ",p->data); //打印当前数据
p=p->next; //移到下一个节点
}
printf("\n");
}
//4.释放链表占用的内存
void free_linklist(linknode_t *head) {
linknode_t *p = head; // 从头节点开始释放
while (p != NULL) {
linknode_t *temp = p; // 暂存当前节点
p = p->next; // 移动到下一个节点
free(temp); // 释放当前节点
}
}
int main(){
//1.创建空链表
linknode_t *head = create_empty_linklist();
//2.准备要插入的数据
datatype_a data[] = {1,5,3,7,9};
int n = sizeof(data) / sizeof(data[0]);
//3.有序插入数据
for (int i = 0; i < n; i++) {
insert_order_linklist(head,data[i]);
}
//4.打印链表
printf_data_linklist(head);
//5.释放链表内存
free_linklist(head);
return 0;
}