Yam8632482 的學(xué)生作業(yè):
linklist.h
//
// Created by 張亞民 on 25-6-20.
//
#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_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_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 clear_linklist(linknode_t *head);
#endif //__LINKLIST_H__
linklist.c
//
// Created by 張亞民 on 25-6-20.
//
#include "linklist.h"
linknode_t *create_linklist() {
linknode_t *head = (linknode_t *) malloc(sizeof(linknode_t));
if (NULL == head) {
printf("malloc fail!\n");
return NULL;
}
memset(head,0,sizeof(linknode_t));
head->next = NULL;
return head;
}
void insert_head_linklist(linknode_t *head, datatype_t data) {
linknode_t *temp = (linknode_t *) malloc(sizeof(linknode_t));
if (NULL == temp) {
printf("malloc fail!\n");
return;
}
temp->data = data;
temp->next = head->next;
head->next = temp;
return;
}
void insert_tail_linklist(linknode_t *head, datatype_t data) {
linknode_t *temp = (linknode_t *) malloc(sizeof(linknode_t));
if (NULL == temp) {
printf("malloc fail!\n");
return;
}
temp->data = data;
while (head->next != NULL) {
head = head->next;
}
temp->next = head->next;
head->next = temp;
return;
}
void insert_order_linklist(linknode_t *head, datatype_t data) {
linknode_t *temp = (linknode_t *) malloc(sizeof(linknode_t));
if (NULL == temp) {
printf("malloc fail!\n");
return;
}
temp->data = data;
linknode_t *pre = head;
while (pre->next != NULL && pre->next->data > data) {
pre = pre->next;
}
temp->next = pre->next;
pre->next = temp;
return;
}
void print_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 head->next == NULL;
}
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 = p->next->next;
free(q) ;
flag = 1;
q=NULL;
}else {
p=p->next;
}
}
if (flag) {
printf("delete data %d successfully!\n", data);
} else {
printf("data %d not exits!\n",data);
return -1;
}
return 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;
}
return;
}
void clear_linklist(linknode_t *head) {
linknode_t *p = head;
linknode_t *q = NULL;
while (p != NULL) {
q = p->next;
print_linklist(p);
free(q);
p = q;
}
return;
}
main.c
#include "linklist.h"
int main(void) {
linknode_t *head = NULL;
int n = 0,i = 0,ret = 0;
datatype_t data;
head = create_linklist();
printf("please input you want insert data number : ");
scanf("%d",&n);
for(i = 0;i < n;i++)
{
printf("please input %d data : ",i);
scanf("%d",&data);
insert_order_linklist(head,data);
}
print_linklist(head);
// datatype_t num = 3;
// ret = delete_data_linklist(head,num);
// if(ret == 0)
// printf("delete data success\n");
// else
// printf("delete data failed\n");
reverse_data_linklist(head);
print_linklist(head);
clear_linklist(head);
printf("cleared\n");
print_linklist(head);
return 0;
}