📄 poslink.c
字号:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>
#include "posLink.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->clear = link_clear;
link->del = link_del;
link->del_node_by_index=link_delete_node_by_index;
/*link->del_node_by_key=link_del_node_by_key;*/
}
void link_insert_rear(C_CLASS LINKLIST* link,void *data,int size)
{
NODE* node;
node = (NODE*)malloc(sizeof(NODE));
init_node(node);
link->rearptr->next=node;
node->prior=link->rearptr;
link->rearptr=node;
link->count++;
node->data=(void *)malloc(size);
memcpy(node->data,data,size);
}
NODE* link_get_node_by_index(C_CLASS LINKLIST* link,int index)
{
if(index>link->count||index<0)
{
printf("index is invalid ");
return NULL;
}
else
{
NODE * head=link->head;
int i=0;
for(i=1;i<=index;i++)
{
head=head->next;
}
return head;
}
}
NODE* link_get_node_by_key(C_CLASS LINKLIST* link,char* key,int (*condition)(void *p1,void *p2))
{
NODE * head=link->head;
int i=0;
for(i=1;i<=link->count;i++)
{
head=head->next;
if(condition(head->data,key)==0)
break;
}
return head;
}
int link_get_index_by_key(C_CLASS LINKLIST* link,char* key,int (*condition)(void *p1,void *p2))
{
NODE * head =link->head;
int i=0;
for(i=1;i<=link->count;i++)
{
head=head->next;
if(condition(head->data,key)==0)
break;
}
return i;
}
int link_delete_node_by_index(C_CLASS LINKLIST* link,int index)
{
if(index>link->count||index<0)
{
printf("index is invalid");
return 0;
}
else
{
NODE * head =link->head;
NODE * indexprior,* indexnext;
int i=0;
for(i=1;i<=index;i++)
{
head=head->next;
}
indexprior=head->prior;
indexnext=head->next;
if(indexnext==NULL)
{
indexprior->next=NULL;
link->rearptr=indexprior;
}
else
{
indexprior->next=indexnext;
indexnext->prior=indexprior;
}
free_node(head);
link->count--;
}
return 1;
}
int link_delete_node_by_key(C_CLASS LINKLIST* link,char* key,int (*condition)(void *p1,void *p2))
{
NODE * head =link->head;
NODE * indexprior,* indexnext;
int i=0;
for(i=1;i<=link->count;i++)
{
head=head->next;
if(condition(head->data,key)==0)
break;
}
indexprior=head->prior;
indexnext=head->next;
if(indexnext==NULL)
{
indexprior->next=NULL;
link->rearptr=indexprior;
}
else
{
indexprior->next=indexnext;
indexnext->prior=indexprior;
}
free_node(head);
link->count--;
return 0;
}
void link_clear(C_CLASS LINKLIST* link)
{
link_del(link);
free(link->head);
}
void link_del(C_CLASS LINKLIST* link)
{
int i,k=link->count;
for(i=1;i<=k;i++)
link_delete_node_by_index(link,1);
}
void init_node(NODE* n)
{
n->data=NULL;
n->next=NULL;
n->prior=NULL;
}
NODE* create_node(void *data,int size)
{
return NULL;
}
void free_node(NODE *n)
{
free(n->data);
free(n);
}
int condition_product(void * data,char *barcode)
{
BARINFO barInfo;
barInfo=(BARINFO)data;
if (strcmp(barInfo->bar_code,barcode)==0)
{
return 0;
}
else
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -