慕尼黑0001808 的學(xué)生作業(yè):
linklist.h
//創(chuàng)建一個單向鏈表,把1,5,3,7,9無序數(shù)據(jù)要求按從大到小的方式利用有序插入的方式插入鏈表,并輸出。
//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 int is_empty_linklist(linknode_t * head);
extern int delete_data_linklist(linknode_t * head,datatype_t data);
extern void printf_data_linklist(linknode_t * head);
extern void free_linklist(linknode_t * head);
#endif
linklist.c
// linklist.c
#include "linklist.h"
//創(chuàng)建空鏈表
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;
}
int delete_data_linklist(linknode_t * head,datatype_t data)
{
linknode_t * p = NULL;
linknode_t * q = NULL;
int flag = 0;
if(is_empty_linklist(head))
{
return -1;
}
p = head;
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;
}
return 0;
}
main.c
//main.c
#include "linklist.h"
int main()
{
linknode_t * head = NULL;
head = create_empty_linklist();
datatype_t arr[] = {1,5,3,7,9,5,8,5,3};
for(int i = 0;i < sizeof(arr)/sizeof(arr[0]);i++)
{
insert_order_linklist(head,arr[i]);
}
printf_data_linklist(head);
int ret = delete_data_linklist(head,3);
if(ret < 0)
{
printf("沒有刪除任何數(shù)據(jù)\n");
}else{
printf("刪除成功!\n");
}
printf_data_linklist(head);
free_linklist(head);
return 0;
}