-
链表的定义
-
链表的时间复杂度(证明过程稍后补充)
-
插入 - O(1),随机插入时复杂度为O(n)
-
-
删除 - O(n)
-
搜索 - O(n)
-
-
示例实现
#ifndef LINKED_LIST_H_INCLUDED
#define LINKED_LIST_H_INCLUDED
struct _vslnode
{
int val;
struct _vslnode *next;
};
typedef struct _vslnode o_vslnode;
struct _vslist
{
o_vslnode *head;
o_vslnode *tail;
};
typedef struct _vslist o_vslist;
o_vslnode *malloc_vslnode(int val);
void free_vslnode(o_vslnode *node);
o_vslnode* vsl_add(o_vslist *p_vsl, int val, int flag /*0- head, 1-tail*/);
void init_vslist(o_vslist *p_list);
#endif // LINKED_LIST_H_INCLUDED
linked_list.c
#include <memory.h>
#include <assert.h>
#include "linked_list.h"
o_vslnode *malloc_vslnode(int val)
{
o_vslnode *p_node = (o_vslnode*)malloc(sizeof(o_vslnode));
p_node->val = val;
return p_node;
}
void free_vslnode(o_vslnode *node)
{
if (NULL != node)
free(node);
}
o_vslnode* vsl_add(o_vslist *p_vsl, int val, int flag /*0- head, 1-tail*/)
{
o_vslnode *p_node;
assert(NULL != p_vsl);
assert((0 == flag) || (1 == flag));
p_node = malloc_vslnode(val);
if(NULL == p_vsl->head)
return (p_vsl->head = p_vsl->tail = p_node);
if (0 == flag)
{
p_node->next = p_vsl->head;
p_vsl->head = p_node;
}
else if (1 == flag)
{
p_vsl->tail->next = p_node;
p_vsl->tail = p_node;
}
else
{
free_vslnode(p_node);
p_node = NULL;
}
return p_node;
}
void init_vslist(o_vslist *p_list)
{
assert(NULL != p_list);
p_list->head = p_list->tail = NULL;
}
main.c
#include <stdio.h>
#include <stdlib.h>
#include "linked_list.h"
int main()
{
o_vslist sl;
init_vslist(&sl);
vsl_add(&sl, 0, 0);
printf("Add to empty linked list\n"
"sl.head:%0x,%d;"
"sl.tail:%0x,%d.\n",
(int)(sl.head),sl.head->val, (int)(sl.tail), sl.tail->val);
vsl_add(&sl, 13, 0);
printf("Add to linked list head\n"
"sl.head:%0x,%d;"
"sl.tail:%0x,%d.\n",
(int)(sl.head),sl.head->val, (int)(sl.tail), sl.tail->val);
vsl_add(&sl, 13, 1);
printf("Add to linked list tail\n"
"sl.head:%0x,%d;"
"sl.tail:%0x,%d.\n",
(int)(sl.head),sl.head->val, (int)(sl.tail), sl.tail->val);
return 0;
}