📄 link.c
字号:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>
#include "link.h"
void link_init(C_CLASS LINKLIST* link)
{
NODE* node;
link->THIS = link;
node = (NODE*)malloc(sizeof(NODE));
init_node(node);
link->head = node;
link->rearptr = link->head;
link->count = 0;
link->insert_rear = link_insert_rear;
link->get_node_by_index = link_get_node_by_index;
link->get_node_by_key = link_get_node_by_key;
link->get_index_by_key = link_get_index_by_key;
link->delete_node_by_key = link_delete_node_by_key;
link->link_delete_node_by_index=link_delete_node_by_index;
link->clear = link_clear;
link->del = link_del;
}
void link_insert_rear(C_CLASS LINKLIST* link,void *data,int size)
{
NODE *temp=create_node(data,size);
if (temp==NULL)
{
return;
}
link->rearptr->next=temp;
temp->prior=link->rearptr;
temp->next=NULL;
link->rearptr=temp;
link->count++;
}
NODE* link_get_node_by_index(C_CLASS LINKLIST* link,int index)
{ int i=1;
NODE * temp;
temp=link->head->next;
if (temp==NULL)
{
return NULL;
}
while (temp && i<=link->count)
{
if (i==index)
{
return temp;
}
i++;
temp=temp->next;
}
return NULL;
}
NODE* link_get_node_by_key(C_CLASS LINKLIST* link,char* key,int (*condition)(void *p1,void *p2))
{
NODE *temp=link->head->next;
if (temp==NULL)
{
return NULL;
}
while (temp)
{
if (condition(temp->data,key)==0)
{
return temp;
}
temp=temp->next;
}
return NULL;
}
int link_get_index_by_key(C_CLASS LINKLIST* link,char* key,int (*condition)(void *p1,void *p2))
{ int i=1;
NODE * temp;
temp=link->head->next;
if (temp==NULL)
{
return -1;
}
while (temp)
{
if (condition(temp->data,key)==0)
{
return i;
}
i++;
temp=temp->next;
}
return -1;
}
int link_delete_node_by_index(C_CLASS LINKLIST* link,int index)
{
int i=1;
NODE *temp;
temp=link->head->next;
while(temp)
{
if(i==index)
{
if(i==link->count)
{
// temp=link->rearptr;
link->rearptr=link->rearptr->prior;
link->rearptr->next=NULL;
link->count--;
}
else
{
temp->next->prior=temp->prior;
temp->prior->next=temp->next;
link->count--;
}
free_node(temp);
return i;
}
else
{
i++;
temp=temp->next;
}
}
return 0;
}
int link_delete_node_by_key(C_CLASS LINKLIST* link,char* key,int (*condition)(void *p1,void *p2))
{
int i;
i=link_get_index_by_key(link,key,(int (*)(void*,void*))condition);
if(link_delete_node_by_index(link,i)==0)
{
return -1;
}
else
{
return 0;
}
}
void link_clear(C_CLASS LINKLIST* link)
{
NODE * temp=link->head;
link_del(link);
free_node(temp);
link->head=NULL;
link->rearptr=NULL;
}
void link_del(C_CLASS LINKLIST* link)
{
NODE * temp=link->head->next;
if (temp==NULL)
{
return;
}
while(link->head->next&&(link->count)>0)
{
temp=link->head->next;
link->head->next=link->head->next->next;
free_node(temp);
link->count--;
}
}
void init_node(NODE* n)
{
n->data=NULL;
n->next=NULL;
n->prior=NULL;
}
NODE* create_node(void *data,int size)
{
NODE *temp=(NODE*)malloc(sizeof(NODE));
void *new_data=malloc(size);
if(temp==NULL)
{
return NULL;
}
init_node(temp);
temp->data=memcpy(new_data,data,size);
return temp;
}
void free_node(NODE *n)
{
free(n->data);
free(n);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -