慕尼黑0001808 的学生作业:
//创建一个单向链表,把1,5,3,7,9无序数据要求按从大到小的方式利用有序插入的方式插入链表,并输出。
//linklist.h
#ifndef __LINKLIST_H__
#define __LINKLIST_H__
#include
#include
#include
typedef int datatype_t;
typedef struct node{
datatype_t data;
struct node * next;
}linknode_t;
extern linknode_t * create_empty_linklist();
extern void insert_order_linklist(linknode_t * head,datatype_t data);
extern void reverse_data_linklist(linknode_t * head);
extern int is_empty_linklist(linknode_t * head);
extern void printf_data_linklist(linknode_t * head);
extern void free_linklist(linknode_t * head);
#endif
// linklist.c
#include "linklist.h"
//创建空链表
linknode_t * create_empty_linklist()
{
linknode_t * head = NULL;
head = (linknode_t *)malloc(sizeof(linknode_t));
if(NULL == head)
{
printf("malloc linknode_t fail\n");
return NULL;
}
memset(head,0,sizeof(linknode_t));
head->next = NULL;
return head;
}
void insert_order_linklist(linknode_t * head,datatype_t data)
{
linknode_t * temp = NULL;
temp = (linknode_t *)malloc(sizeof(linknode_t));
if(NULL == temp)
{
printf("temp malloc fail\n");
return;
}
temp->data = data;
linknode_t * p = head;
while(p->next!=NULL && data > p->next->data)
{
p = p->next;
}
temp->next = p->next;
p->next = temp;
}
void printf_data_linklist(linknode_t * head)
{
linknode_t * p = head;
while(p->next!=NULL)
{
printf("%d ",p->next->data);
p = p->next;
}
printf("\n");
}
void free_linklist(linknode_t * head)
{
if(head == NULL)return;
linknode_t * p = head;
linknode_t * temp = NULL;
while(p->next!=NULL)
{
temp = p;
p = p->next;
free(temp);
temp = NULL;
}
free(p);
p = NULL;
}
int is_empty_linklist(linknode_t * head)
{
return head->next == NULL?1:0;
}
void reverse_data_linklist(linknode_t * head)
{
linknode_t * p = NULL;
linknode_t * q = NULL;
p = head->next->next;
head->next->next = NULL;
while(p !=NULL)
{
q = p->next;
p->next = head->next;
head->next = p;
p = q;
}
}
//main.c
#include "linklist.h"
int main()
{
linknode_t * head = NULL;
head = create_empty_linklist();
datatype_t arr[] = {1,5,3,7,9};
for(int i = 0;i < sizeof(arr)/sizeof(arr[0]);i++)
{
insert_order_linklist(head,arr[i]);
}
printf_data_linklist(head);
reverse_data_linklist(head);
printf_data_linklist(head);
free_linklist(head);
return 0;
}