慕運維8597106 的學生作業(yè):
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
#include "linklist.h"
#include
#include
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;
}
}
main.c
#include
#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);
insert_tail_linklist(head,5);
insert_tail_linklist(head,8);
insert_tail_linklist(head,5);
insert_tail_linklist(head,3);
print_data_linklist(head);
int ret = delete_data_linklist(head,3);
printf("ret = %d\n",ret);
print_data_linklist(head);
//reverse_data_linklist(head);
//print_data_linklist(head);
return 0;
}
結(jié)果:
linux@linux:~/learn/chapter5/linklist$ ./a.out
1 5 3 7 9 5 8 5 3
delete 3 successfulret = 0
1 5 7 9 5 8 5