📄 linklist.c
字号:
#include "linklist.h"
#include <stdlib.h>
void link_init(LINKLIST *linklist)
{
linklist->head = linklist->rearptr = NULL;
linklist->count = 0;
}
void insert_link_index(LINKLIST *linklist,int index,void *data)
{
NODE *p =NULL;
p = create_node(data);
if(index == linklist->count)
insert_rear_link(linklist,data);
else
{
NODE *q = linklist->head;
int i = 1;
for(i;i<index;i++)
{
q = q->next;
}
q->next->prior = p;
p->next = q->next;
p->prior = q ;
q->next = p;
linklist->count++;
}
}
void insert_front_link(LINKLIST *linklist,void *data)
{
NODE *p = NULL;
p = create_node(data);
p->prior = NULL;
if(linklist->count == 0)
{
p->next = NULL;
linklist->rearptr = p;
}
else
{
p->next = linklist->head;
linklist->head->prior = p;
}
linklist->head = p;
linklist->count++;
}
void insert_rear_link(LINKLIST *linklist,void *data)
{
NODE *p = NULL;
p = create_node(data);
p->next = NULL;
if(linklist->count == 0)
{
p->prior = NULL;
linklist->head = p;
}
else
{
p->prior = linklist->rearptr;
linklist->rearptr->next = p;
}
linklist->rearptr = p;
linklist->count++;
}
void del_front_link(LINKLIST *linklist)
{
if(linklist->count == 0)
return;
NODE *p = linklist->head;
if(linklist->count == 1)
linklist->head = linklist->rearptr = NULL;
else
{
linklist->head = linklist->head->next;
linklist->head->prior = NULL;
}
free_node(p);
linklist->count--;
}
void del_rear_link(LINKLIST *linklist)
{
if(linklist->count == 0)
return;
NODE *p = linklist->rearptr;
if(linklist->count == 1)
linklist->head = linklist->rearptr = NULL;
else
{
linklist->rearptr = linklist->rearptr->prior;
linklist->rearptr->next = NULL;
}
free_node(p);
linklist->count--;
}
NODE *get_node_by_index(LINKLIST *linklist,int index)
{
NODE *p;
p = linklist->head;
int i = 1;
for(i;i<index;i++)
{
p = p->next;
}
return p;
}
void free_all_node(LINKLIST *linklist)
{
while(linklist->count > 0)
{
del_rear_link(linklist);
}
}
void free_list(LINKLIST *linklist)
{
free_all_node(linklist);
free(linklist);
}
void free_at(LINKLIST *linklist,int position)
{
if(position == 1)
del_front_link(linklist);
else if(position == linklist->count)
del_rear_link(linklist);
else
{
int i = 1;
NODE *p;
p = linklist->head;
for(i; i<position; i++)
p = p->next;
p->prior->next = p->next;
p->next->prior = p->prior;
free_node(p);
linklist->count--;
}
}
NODE *create_node(void *data)
{
NODE *p;
p = (NODE *)malloc(sizeof(NODE));
p->node_data = data;
p->next = p->prior = NULL;
return p;
}
void free_node(NODE *node)
{
free(node->node_data);
free(node);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -