C语言 先进先出链表

C语言 链表

PS: 也是从网上各个帖子中学习的Python,因此代码的格式以及内容有粘贴网上其他大神的代码,如有侵权请告知删除

参照文章:
https://blog.csdn.net/u010299133/article/details/103882723

因工作需要用到C语言的先进先出链表,但从上学开始,链表就只会答答选择题,无法熟练运用,多亏上方链接中的学习汇总,作者的总结对我十分有用,感谢!本篇意在对参考文章进行学习理解。

//声明链表节点
typedef struct _node{
	time_t data;//节点内存放的数据
	struct _node *next;//节点内指向下一个节点的指针
}node;
//声明链表
typedef struct {
	node *front;//链表头指针
	node *rear;//链表尾指针
}List;
//创建链表
List *Create_List(void)
{
	List * List0 = (List *)malloc(sizeof(List));//声明一个节点的空间
	List0->front = NULL;
	List0->rear = NULL;
	
	return List0;
}
//插入链表节点
List *Insert_Node(List *List0, time_t data)
{
	node *new_node = NULL;

	if (NULL == List0)//插入节点前,需要建立链表
	{
		printf("List0 is NULL\n");
		return NULL;
	}
	
	new_node = (node *)malloc(sizeof(node));
	new_node->data = data;//新节点的数值
	new_node->next = NULL;//新节点插入队尾,所以其中的Next指向Null
	
	if (List0->rear == NULL)//如果插入的是第一个节点,则头尾指针都指向该节点
	{
		List0->front = List0->rear = new_node;
	}
	else//如果非第一个节点,将新节点连接在前链表最后一个节点后
	{
		List0->rear->next = new_node;
		List0->rear = new_node;
	}	
	return List0;
}
//删除链表目前头节点
List *Delete_List(List *List0)
{
	node *d_node = NULL;
	d_node = List0->front;
	if (NULL == d_node)//如果链表没有建立
	{
		printf("this is empty List\n");
		return NULL;
	}
	else
	{
		List0->front = List0->front->next;//将头节点移动至要删除的节点后面一个节点
		if (List0->front == NULL)//如果当前链表只有要删除的这一个节点
		{
			List0->rear = NULL;//头尾都指向Null
		}
		free(d_node);//释放要删除的节点
	}
	return List0;
}
//获得链表的长度
int Get_List_Length(List *List0)
{
	node *t_node = NULL;
	int len = 0;
	
	t_node = List0->front;
	if (NULL != t_node)
	{
		len = 1;
	}
	while (t_node != List0->rear)
	{
		t_node = t_node->next;
		len++;
	}
	
	return len;
}

你可能感兴趣的:(链表)