练习
创建一个单向链表,把1,5,3,7,9插入链表到链表中,然后逆序链表,最后清除整个链表。
创建一个单向链表,把1,5,3,7,9插入链表到链表中,然后逆序链表,最后清除整个链表。
登录后即可发布作业,立即登录
全部作业 142
linklist.h
#ifndef __LINKLIST__H_
#define __LINKLIST__H_
typedef int datatype_t;
typedef struct node
{
datatype_t data;
struct node *next;
} linknode_t;
extern linknode_t *create_empty_linklist();
extern void insert_head_linklist(linknode_t *head,datatype_t data);
extern void insert_tail_linklist(linknode_t *head,datatype_t data);
extern void insert_order_linklist(linknode_t *head,datatype_t data);
extern void print_data_linklist(linknode_t *head);
extern void insert_desc_order_linklist(linknode_t *head,datatype_t data);
extern int is_empty_linklist(linknode_t *head);
extern int delete_data_linklist(linknode_t *head,datatype_t data);
extern void reverse_data_linklist(linknode_t *head);
extern void clean_up_linklist(linknode_t *head);
#endif
linklist.c
#include <stdio.h>
#include "linklist.h"
#include <stdlib.h>
#include <string.h>
linknode_t *create_empty_linklist()
{
linknode_t *head = NULL;
head = (linknode_t *)malloc(sizeof(linknode_t));
if(NULL == head){
printf("malloc failed!\n");
return NULL;
}
memset(head,0,sizeof(linknode_t));
return head;
}
void insert_head_linklist(linknode_t *head,datatype_t data)
{
linknode_t *temp = NULL;
temp = (linknode_t *)malloc(sizeof(linknode_t));
if(NULL == temp){
printf("malloc failed!\n");
}
temp->data = data;
temp->next = head->next;
head->next = temp;
}
void insert_tail_linklist(linknode_t *head,datatype_t data)
{
linknode_t *p = head;
linknode_t *temp = NULL;
temp = (linknode_t *)malloc(sizeof(linknode_t));
if(NULL == temp){
printf("malloc failed!\n");
}
while(p->next != NULL)
{
p = p->next;
}
temp->data = data;
temp->next = p->next;
p->next = temp;
}
void insert_order_linklist(linknode_t *head,datatype_t data)
{
linknode_t *p = head;
linknode_t *temp = NULL;
temp = (linknode_t *)malloc(sizeof(linknode_t));
if(NULL == temp){
printf("malloc failed!\n");
}
while(p->next != NULL && p->next->data < data)
{
p = p->next;
}
temp->data = data;
temp->next = p->next;
p->next = temp;
}
void insert_desc_order_linklist(linknode_t *head,datatype_t data)
{
linknode_t *p = head;
linknode_t *temp = NULL;
temp = (linknode_t *)malloc(sizeof(linknode_t));
if(NULL == temp){
printf("malloc failed!\n");
}
while(p->next != NULL && p->next->data > data)
{
p = p->next;
}
temp->data = data;
temp->next = p->next;
p->next = temp;
}
void print_data_linklist(linknode_t *head)
{
linknode_t *p = head;
while(p->next != NULL)
{
printf("%d ",p->next->data);
p = p->next;
}
printf("\n");
}
int is_empty_linklist(linknode_t *head)
{
return NULL == head->next ? 1 : 0;
}
int delete_data_linklist(linknode_t *head,datatype_t data)
{
int flag = 0;
if(is_empty_linklist(head))
{
return -1;
}
linknode_t *p = head;
linknode_t *q = NULL;
while(p->next != NULL)
{
if(p->next->data == data)
{
q = p->next;
p->next = q->next;
free(q);
q = NULL;
flag = 1;
}else
{
p = p->next;
}
}
if(flag == 0){
return -2;
}else{
printf("delete %d successful",data);
}
return 0;
}
void reverse_data_linklist(linknode_t *head)
{
if(is_empty_linklist(head)){
return;
}
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;
}
}
void clean_up_linklist(linknode_t *head)
{
linknode_t *p = NULL;
linknode_t *q = NULL;
p = head;
while(p != NULL)
{
q = p->next;
print_data_linklist(p);
free(p);
p = q;
}
}
main.c
#include <stdio.h>
#include "linklist.h"
int main(int argc, const char *argv[])
{
linknode_t *head = create_empty_linklist();
if(NULL == head)
{
return -1;
}
insert_tail_linklist(head,1);
insert_tail_linklist(head,5);
insert_tail_linklist(head,3);
insert_tail_linklist(head,7);
insert_tail_linklist(head,9);
print_data_linklist(head);
reverse_data_linklist(head);
printf("逆序后的链表\n");
print_data_linklist(head);
printf("执行清除链表\n");
clean_up_linklist(head);
printf("清除完成之后打印\n");
print_data_linklist(head);
return 0;
}
执行结果