//seq_list.h
#ifndef _SEQ_LIST_H_
#define _SEQ_LIST_H_
struct
seq_list
{
int
capacity;
int
length;
unsigned
int
*node;
};
struct
seq_list* seq_list_create(
int
capacity);
int
seq_list_capacity(
struct
seq_list* list);
int
seq_list_length(
struct
seq_list* list);
int
seq_list_insert(
struct
seq_list* list,
int
position,
void
* data);
void
* seq_list_get(
struct
seq_list* list,
int
position);
void
* seq_list_remove(
struct
seq_list* list,
int
position);
void
seq_list_clear();
void
seq_list_destroy(
struct
seq_list* list);
#endif
//seq_list.c
#include "seq_list.h"
#include <stddef.h>
#include <malloc.h>
struct
seq_list* seq_list_create(
int
capacity)
{
int
i = 0;
struct
seq_list* ret = NULL;
if
(capacity >= 0)
{
ret = (
struct
seq_list*)
malloc
(
sizeof
(
struct
seq_list) +
sizeof
(unsigned
int
) * capacity);
if
(ret != NULL)
{
ret->capacity = capacity;
ret->length = 0;
ret->node = (unsigned
int
*) (ret + 1);
}
}
return
ret;
}
int
seq_list_insert(
struct
seq_list* list,
int
position,
void
* data)
{
int
i = 0;
int
ret;
ret = (list != NULL);
ret = ret && position >= 0 && position < list->capacity;
ret = ret && list->length < list->capacity;
if
(ret)
{
for
(i = list->length; i > position; i--)
{
list->node[i] = (list->node[i - 1]);
}
list->node[i] = (unsigned
int
)data;
double
*p = (
double
*)data;
list->length++;
}
return
ret;
}
void
* seq_list_get(
struct
seq_list* list,
int
position)
{
void
* ret = NULL;
if
(list != NULL && position >= 0 && position < list->length)
{
ret = (
void
*)list->node[position];
}
return
ret;
}
void
* seq_list_remove(
struct
seq_list* list,
int
position)
{
void
* ret = NULL;
int
i = 0;
if
(list != NULL && position >= 0 && position < list->length)
{
int
i = 0;
ret = seq_list_get(list, position);
for
(i = position + 1; i < list->length; i++)
{
list->node[i - 1] = list->node[i];
}
list->length--;
}
return
ret;
}
int
seq_list_capacity(
struct
seq_list* list)
{
int
ret = -1;
if
(list != NULL)
{
ret = list->capacity;
}
return
ret;
}
int
seq_list_length(
struct
seq_list* list)
{
int
ret = -1;
if
(list != NULL)
{
ret = list->length;
}
return
ret;
}
void
seq_list_clear(
struct
seq_list* list)
{
if
(list != NULL)
{
list->length = 0;
}
}
void
seq_list_destroy(
struct
seq_list* list)
{
free
(list);
list = NULL;
}
//seq_list_main.c
#include <stdio.h>
#include "seq_list.h"
int
main(
void
)
{
struct
seq_list* list = seq_list_create(100);
double
*p = NULL;
int
ret = 0;
double
a = 1.1;
double
b = 2.2;
double
c = 3.3;
double
d = 4.4;
double
e = 5.5;
seq_list_insert(list, 0, &a);
seq_list_insert(list, 1, &b);
seq_list_insert(list, 2, &c);
seq_list_insert(list, 3, &d);
seq_list_insert(list, 4, &e);
printf
(
"list capacity = %d, length = %d\n"
, seq_list_capacity(list), seq_list_length(list));
p = (
double
*)seq_list_get(list, 0);
if
(p != NULL)
{
printf
(
"%lf\n"
, *p);
}
p = (
double
*)seq_list_get(list, 3);
if
(p != NULL)
{
printf
(
"%lf\n"
, *p);
}
p = (
double
*)seq_list_remove(list, 3);
if
(p != NULL)
{
printf
(
"remove data %lf, index at 3 , after length: %d\n"
, *p, seq_list_length(list));
}
p = (
double
*)seq_list_get(list, 3);
if
(p != NULL)
{
printf
(
"after remove, index at 3: %lf\n"
, *p);
}
seq_list_clear(list);
printf
(
"after clear, list length is %d\n"
, seq_list_length(list));
seq_list_destroy(list);
return
0;
}
联系客服