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

📄 chain_common.c

📁 试写一个算法
💻 C
字号:
/**********************************************************************************************************************************/#define CHAIN_COMMON#include "group_common.h"/**********************************************************************************************************************************//**********************************************************************************************************************************//**********************************************************************************************************************************//**********************************************************************************************************************************//*以下为各函数的实现*//**********************************************************************************************************************************//**********************************************************************************************************************************//**********************************************************************************************************************************//**********************************************************************************************************************************/struct chain_init chain_Create(){	struct chain_init newchain;	newchain.chain_length=0;	newchain.chain_head=NULL;	return newchain;};struct chain_cur chain_Curcreate(struct chain_init* chain_name){	struct chain_cur new_cur;	new_cur.chain_name=chain_name;	new_cur.chain_point=NULL;	new_cur.chain_local=0;	return new_cur;	};LONGINT chain_Length(struct chain_cur* cur_name){	return cur_name->chain_name->chain_length;};SHORTINT chain_Eof(struct chain_cur* cur_name){	if(cur_name->chain_point==NULL)return ERR_NODATA;	if(cur_name->chain_local>cur_name->chain_name->chain_length)return ERR_OUTOFLENGTH;	if(cur_name->chain_point->chain_next==NULL)return 1;	return 0;};LONGINT chain_Append(DATA_TYPE indata,struct chain_cur* cur_name){	struct chain_node* new_node;	if(cur_name->chain_point==NULL)	{		new_node=(struct chain_node *)malloc(sizeof(struct chain_node));		if(new_node==NULL)return ERR_OUTOFMEMORY;		new_node->node_data=indata;		new_node->chain_next=NULL;		cur_name->chain_name->chain_head=new_node;		cur_name->chain_point=new_node;		cur_name->chain_name->chain_length++;		return 1;	};	chain_Last(cur_name);	new_node=(struct chain_node *)malloc(sizeof(struct chain_node));	if(new_node==NULL)return ERR_OUTOFMEMORY;	new_node->node_data=indata;	new_node->chain_next=NULL;	cur_name->chain_point->chain_next=new_node;	cur_name->chain_name->chain_length++;	cur_name->chain_local=(cur_name->chain_name->chain_length-1);	return cur_name->chain_name->chain_length;};LONGINT chain_Insert(DATA_TYPE indata,struct chain_cur* cur_name){	struct chain_node* new_node;	if(cur_name->chain_point==NULL)	{		new_node=(struct chain_node *)malloc(sizeof(struct chain_node));		if(new_node==NULL)return ERR_OUTOFMEMORY;		new_node->node_data=indata;		new_node->chain_next=NULL;		cur_name->chain_point=new_node;		cur_name->chain_name->chain_length++;		return 1;	};			new_node=(struct chain_node *)malloc(sizeof(struct chain_node));	if(new_node==NULL)return ERR_OUTOFMEMORY;	new_node->node_data=indata;	new_node->chain_next=cur_name->chain_point->chain_next;	cur_name->chain_point->chain_next=new_node;	chain_Next(cur_name);	cur_name->chain_local++;	cur_name->chain_name->chain_length++;	return cur_name->chain_name->chain_length;};LONGINT chain_Remove(struct chain_cur* cur_name){	struct chain_node* node_drop;	if(cur_name->chain_point==NULL)return ERR_NODATA;	if(chain_Length(cur_name)==1)	{		free(cur_name->chain_point);		cur_name->chain_point=NULL;		cur_name->chain_name->chain_head=NULL;		cur_name->chain_name->chain_length--;		cur_name->chain_local=-1;		return cur_name->chain_name->chain_length;	};	if(cur_name->chain_point==cur_name->chain_name->chain_head)	{		node_drop=cur_name->chain_point;		cur_name->chain_name->chain_head=cur_name->chain_point->chain_next;		chain_Last(cur_name);		free(node_drop);		cur_name->chain_name->chain_length--;		cur_name->chain_local=(cur_name->chain_name->chain_length-1);		return cur_name->chain_name->chain_length;	};	if(cur_name->chain_point->chain_next==NULL)	{		chain_Prev(cur_name);		cur_name->chain_local--;		free(cur_name->chain_point->chain_next);		cur_name->chain_point->chain_next=NULL;		cur_name->chain_name->chain_length--;		return cur_name->chain_name->chain_length;	};	chain_Prev(cur_name);	cur_name->chain_local--;	node_drop=cur_name->chain_point->chain_next;	cur_name->chain_point->chain_next=cur_name->chain_point->chain_next->chain_next;	free(node_drop);	cur_name->chain_name->chain_length--;	return cur_name->chain_name->chain_length;};void chain_First(struct chain_cur* cur_name){	cur_name->chain_point=cur_name->chain_name->chain_head;	cur_name->chain_local=0;};void chain_Next(struct chain_cur* cur_name){	if(cur_name->chain_point==NULL)return;	if(cur_name->chain_point->chain_next==NULL)return;	cur_name->chain_point=cur_name->chain_point->chain_next;	cur_name->chain_local++;};void chain_Prev(struct chain_cur* cur_name){	struct chain_node* now_node;	if(cur_name->chain_point==NULL)return;	now_node=cur_name->chain_point;	chain_First(cur_name);	cur_name->chain_local=0;	for(;;)	{		if(cur_name->chain_point->chain_next==now_node)break;		if(cur_name->chain_point->chain_next==NULL)break;		chain_Next(cur_name);		cur_name->chain_local++;	};};void chain_Last(struct chain_cur* cur_name){	if(cur_name->chain_point==NULL)return;	chain_First(cur_name);	for(;;)	{		chain_Next(cur_name);		if(cur_name->chain_point->chain_next==NULL)break;	};	cur_name->chain_local=(cur_name->chain_name->chain_length-1);};void chain_Goto(LONGINT chain_location,struct chain_cur* cur_name){	LONGINT i=0;	if(cur_name->chain_point==NULL)return;	chain_First(cur_name);	cur_name->chain_local=0;		for(;;)	{		if(i==chain_location)break;		if(cur_name->chain_point->chain_next==NULL)break;		chain_Next(cur_name);		cur_name->chain_local++;		i++;	};};DATA_TYPE chain_Get(struct chain_cur* cur_name){	if(cur_name->chain_point==NULL)return ERR_NODATA;	return cur_name->chain_point->node_data;};void chain_Set(DATA_TYPE indata,struct chain_cur* cur_name){	if(cur_name->chain_point==NULL)return;	cur_name->chain_point->node_data=indata;};void chain_Drop(struct chain_cur* cur_name){	chain_Last(cur_name);	for(;;)	{		if(cur_name->chain_point==cur_name->chain_name->chain_head)		{			free(cur_name->chain_name->chain_head);			cur_name->chain_point=NULL;			cur_name->chain_name->chain_head=NULL;			cur_name->chain_name->chain_length=0;			return;		};		chain_Prev(cur_name);		free(cur_name->chain_point->chain_next);	};};/**********************************************************************************************************************************//**********************************************************************************************************************************//**********************************************************************************************************************************//**********************************************************************************************************************************//*调试用*//**********************************************************************************************************************************//**********************************************************************************************************************************//**********************************************************************************************************************************//**********************************************************************************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -