⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 link.c

📁 linux平台下用C开发的一个超市管理系统(结合了ORACLE数据库)
💻 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 + -