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

📄 linklist.c

📁 本人做的一个基于LINUX平台的小程序
💻 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 + -