mani.c
#include <stdio.h>
#include "list.h"
int main()
{
// int a[] = {0,1,2,3,4,5,6,7,8,9};
int i = 0;
int a[10];
linknode *head;
linknode *p;
head = create_node();
printf("put in 10 number:\n");
while(i < 10)
{
scanf("%d",&a[i]);
i++;
}
for( i = 0; i < sizeof(a)/sizeof(int); i++)
{
linknode_order_insert(head,a[i]);
}
display_linknode(head);
insert_node(head,2,10);
display_linknode(head);
linknode_delete(head,10);
display_linknode(head);
linknode_reverse(head);
display_linknode(head);
//linknode_is_empty(head);
// linknode_clear(head);
// display_linknode(head);
linknode_delete_at(head,11);
display_linknode(head);
return 0;
}
list.h
#ifndef _LINK_H_
#define _LINK_H_
typedef int datatype;
typedef struct node
{
datatype data;
struct node *next;
}linknode;
linknode *create_node();
linknode_order_insert(linknode *,int x);
insert_node(linknode *,int i,datatype x);
display_linknode(linknode *head);
linknode_delete(linknode *head,int x);
linknode_clear(linknode *head);
linknode *linknode_reverse(linknode *head);
int linknode_is_empty(linknode *head);
linknode_delete_at(linknode *head,int i);
#endif
list.c
#include <stdio.h>
#include <stdlib.h>
#include "list.h"
linknode * create_node()
{
linknode *head;
head = (linknode *)malloc(sizeof(linknode));
if(head)
{
head->next = NULL;
return head;
}
else
{
return -1;
}
}
insert_node(linknode *head,int i,datatype x)
{
int j = 0;
linknode *p,*q;
p = head;
while(j < i - 1 && p)
{
p = p->next;
j++;
}
if(p !=NULL)
{
q = (linknode *)malloc(sizeof(linknode));
q->data = x;
q->next = p->next;
p->next = q;
}
else
{
return -1;
}
}
linknode_order_insert(linknode *head,int x)
{
/* linknode *p = head->next,*q;
while(p && p->data < x)
{
p = p->next;
}*/
linknode *p = head,*q;
while(p->next && p->next->data < x)
p = p->next;
q = (linknode *)malloc(sizeof(linknode));
q ->data = x;
q->next = p->next;
p->next = q;
}
display_linknode(linknode *head)
{
linknode *p = head->next;
if(head->next == NULL)
{
printf("the linknode is empty\n");
}
else
{
printf("the linknode is:\n");
while(p)
{
printf("%d ",p->data);
p = p->next;
}
printf("\n");
}
}
linknode_delete(linknode *head,int x)
{
linknode *p = head,*q;
while(p->next && x != p->next->data)
{
p = p->next;
}
if(p == NULL)
{
printf("no locate,delete error!\n");
}
else
{ q = p->next;
p->next = q->next;
free(q);
q = NULL;
}
}
linknode_clear(linknode *head)
{
linknode *p = head,*q;
while(p->next)
{
q = p->next;
p->next = q->next;
printf("clear:%d\n",q->data);
free(q);
q = NULL;
}
p->next = NULL;
printf("\n");
}
linknode *linknode_reverse(linknode *head)
{
linknode *p1 = head->next,*p2,*p3;
p2 = p1->next;
p3 = p2->next;
p1->next = NULL;
while(p3)
{
p2->next = p1;
p1 = p2;
p2 = p3;
p3 = p3->next;
}
p2->next = p1;
head->next= p2;
return head;
}
int linknode_is_empty(linknode *head)
{
return(head->next == NULL);
}
linknode_delete_at(linknode *head,int i)
{
int j = 0;
linknode *p = head, *q;
while( j < i - 1 && p->next)
{
p = p->next;
j++;
}
if(p->next)
{
q = p->next;
p->next = q->next;
free(q);
q = NULL;
return 0;
}
else
{
printf("this is not the number\n");
return -1;
}
}