#ifndef LIST_H_INCLUDED
#define LIST_H_INCLUDED
typedef int ElemType;
typedef struct Node ListNode;
typedef unsigned short int Bool;
struct Node
{
ElemType node_data;
ListNode * next_node;
};
ListNode * CreateListNode(int);
Bool GetNodeData(ListNode *, int, ElemType *);
unsigned int NodeNum(ListNode *);
ListNode * InsertNodeData(ListNode *, int, ElemType);
ListNode * DeleteNodeData(ListNode *, int);
Bool DistroyListNode(ListNode *);
#endif
#include "list.h"
#include <stddef.h>
#include <stdlib.h>
#include <stdio.h>
ListNode * CreateListNode(int n)
{
ListNode * list_node = (ListNode *)malloc(sizeof(ListNode));
printf("please input node data:");
scanf("%d", &(list_node->node_data));
list_node->next_node = NULL;
int i;
for(i = 0; i < n - 1; ++i)
{
ListNode * new_node = (ListNode *)malloc(sizeof(ListNode));
scanf("%d", &(new_node->node_data));
new_node->next_node = list_node;
list_node = new_node;
}
return list_node;
}
Bool GetNodeData(ListNode *list_node, int i, ElemType * data_ptr)
{
int j = 0;
while(list_node && j < i - 1)
{
list_node = list_node->next_node;
++j;
}
if(!list_node) return 0;
*data_ptr = list_node->node_data;
return 1;
}
unsigned int NodeNum(ListNode * list_node)
{
int n = 0;
if(!list_node) return n;
while(list_node)
{
list_node = list_node->next_node;
++n;
}
return n;
}
ListNode * InsertNodeData(ListNode * list_node, int i, ElemType data)
{
ListNode * node_ptr = list_node;
int j = 0;
while(node_ptr && j < i - 2)
{
node_ptr = node_ptr->next_node;
++j;
}
if(!node_ptr) return 0;
ListNode * new_node = (ListNode *)malloc(sizeof(ElemType));
new_node->node_data = data;
if(i > 1)
{
new_node->next_node = (*node_ptr).next_node;
(*node_ptr).next_node = new_node;
return list_node;
}
else
{
new_node->next_node = node_ptr;
node_ptr = new_node;
return node_ptr;
}
}
ListNode * DeleteNodeData(ListNode * list_node, int i)
{
ListNode * node_ptr = list_node;
int j = 0;
while(node_ptr && j < i - 2)
{
node_ptr = node_ptr->next_node;
++j;
}
if(!node_ptr) return 0;
if( i > 1)
{
ListNode * delete_node = (*node_ptr).next_node;
(*node_ptr).next_node = (*(*node_ptr).next_node).next_node;
free(delete_node);
return list_node;
}
else
{
ListNode * delete_node = node_ptr;
node_ptr = node_ptr->next_node;
free(delete_node);
return node_ptr;
}
}
Bool DistroyListNode(ListNode * list_node)
{
int n = NodeNum(list_node);
if(!list_node) return 0;
ListNode * node_ptr = list_node;
while(n)
{
int i = 0;
while(i < n - 1)
{
list_node = list_node->next_node;
++i;
}
free(list_node);
list_node = node_ptr;
--n;
}
return 1;
}
#include "list.h"
#include <stdio.h>
#include <stddef.h>
int main()
{
ListNode * list_node = CreateListNode(3);
list_node = InsertNodeData(list_node, 2, 20);
list_node = InsertNodeData(list_node, 1, 30);
list_node = InsertNodeData(list_node, 1, 40);
list_node = InsertNodeData(list_node, 3, 50);
printf("number of node:%d\n", NodeNum(list_node));
int i;
for(i = 0; i < NodeNum(list_node); ++i)
{
int NodeData;
GetNodeData(list_node, i + 1, &NodeData);
printf("NodeData = %d\t", NodeData);
}
putchar('\n');
list_node = DeleteNodeData(list_node, 1);
list_node = DeleteNodeData(list_node, 2);
list_node = DeleteNodeData(list_node, 3);
printf("number of node:%d\n", NodeNum(list_node));
for(i = 0; i < NodeNum(list_node); ++i)
{
int NodeData;
GetNodeData(list_node, i + 1, &NodeData);
printf("NodeData = %d\t", NodeData);
}
DistroyListNode(list_node);
return 0;
}