#include <stdlib.h>
#include <stdio.h>
#include <time.h>
extern "C"
{
typedef struct node_s node_t;
struct node_s
{
int value;
node_t* next;
};
void destroy(node_t* head)
{
node_t *p, *n = head;
while(n)
{
p = n;
n = n->next;
free(p);
}
}
typedef bool (*cmp_fn)(int,int);
bool less_or_equal(int a, int b)
{
return a <= b;
}
bool greater_or_equal(int a, int b)
{
return a >= b;
}
bool insert(node_t** head, int value, cmp_fn cmp = less_or_equal)
{
node_t *entry, **current = head, *n ;
n = (node_t*)malloc(sizeof(node_t));
if(!n) return false;
n->value = value;
n->next = 0;
while(*current)
{
entry = *current;
if(cmp(value, entry->value))
{
*current = n;
n->next = entry;
return true;
}
current = &entry->next;
}
*current = n;
return true;
}
}
int main()
{
srand((unsigned int)time(0));
node_t* list = 0;
for(int i = 0; i < 5 ; ++i)
{
if(!insert(&list, rand()/*, greater_or_equal*/))
{
break;
}
}
for(node_t* n = list; n; n = n->next)
{
printf("%d\n", n->value);
}
destroy(list);
return 0;
}
demo for insert values into sorted single list
最新推荐文章于 2021-03-14 21:31:11 发布