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

📄 list.c

📁 数据结构自己写的单向链表的实现
💻 C
字号:
#include <stdio.h>#include <stdlib.h>#include "list.h"List * Create_List(void){	List *temp;	temp = malloc(sizeof(List));	temp->length =  0;	temp->head = NULL;	return temp; }void Destroy_List(List *li,DelData FreeData){	Node *temp = NULL,*bak=NULL;	temp = li->head;	while(temp)	{		bak = temp;		FreeData(bak->data);		temp = temp->next;	}	if(li)		free(li);}void Add_Node(List *li,DataType data){	Node *new,*temp=NULL;	new = malloc(sizeof(Node));	new->data = data;	new->next = NULL;	if(!li->head)	{		li->head = new;	}	else	{		temp = li->head;		while(temp->next)		{			temp = temp->next;		}		temp->next = new;	}	li->length ++;}void Print_List(List *li,PrintData p){	Node *temp;	temp = li->head;	if(!temp)		return;	while(1)	{		p(temp->data);		temp = temp->next;		if (NULL == temp)			break; 	}}void Insert_Node(List *li,InsertCond cond,DataType data){	Node *new,*temp;	new = malloc(sizeof(Node));	new->data = data;	new->next = NULL;	if(!li->head)//if list is null	{		li->head = new;//insert new		li->length ++;	}	if(1 == cond(li->head->data,data))//if head node fit	{		new->next = li->head;		li->head = new;	}	else	{		temp = li->head;		while(temp->next)		{			if(1 == cond(temp->next->data,data))			{				new->next = temp->next;				temp->next = new;				li->length++;			}			temp = temp->next;		}		temp->next = new;//if find nothing, add last		li->length ++;		return;		}			}void Delete_Node(List *li,DelCond cond,DelData del){	Node *temp = NULL,*bak = NULL;	temp = li->head;	bak = li->head;	while(temp && temp->next)//the node is not first node	{		if(1 == cond(temp->next->data))//include last node,compare next node 's data;		{			bak = temp->next;//backup the pointer of node want to del;			temp->next = temp->next->next;//change pointer before del node			del(bak->data);//free data if data include pointer 			free(bak);//free node			li->length --;		}		else		{			temp = temp->next;		}	}	if(1 == cond(li->head->data))//the node is first node	{		temp = li->head;				li->head = temp->next;		del(temp->data);		free (temp);		li->length --;	}}List * Invert_List(List *li){	Node * pre = NULL,*cur=NULL,*nex=NULL;	if(NULL == li->head || NULL == li->head->next)		return li;	else	{		pre = li->head;		cur = pre->next;		pre->next = NULL;		while(nex = cur->next)		{			cur->next = pre;			pre = cur;			cur = nex;			}		li->head = cur;		cur->next = pre;	}	return li;	}

⌨️ 快捷键说明

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