C语言数据结构——队列(尾插法)
前言:
一、入队
void in_team(int data)
{
node_t *new_node;
new_node = (node_t *) malloc(sizeof(node_t));
if(new_node == NULL)
printf("fail for malloc!");
memset(new_node, 0, sizeof(*new_node));
new_node->next = NULL;
new_node->data = data;
if(head == NULL)
{
head = new_node;
}
else
{
tail->next = new_node;
}
tail = new_node;
}
二、出队
void out_team(void)
{
node_t *new_node;
if(head == NULL)
printf("the team is nothing!");
else
{
new_node = head;
head = new_node->next;
free(new_node );
}
}
三、销毁
void destroy_team(void)
{
if(head != NULL )
out_team();
}
四、遍历
void team_printf(void)
{
StackNode *p_node;
p_node = head;
if(p_node == NULL)
printf("队列为空!\n");
else
printf("队列数值为:");
while(p_node != NULL)
{
printf("%d ", p_node->data);
p_node = p_node->next;
}
}
五、具体代码
#include<stdio.h>
#include <stdlib.h>
#include<string.h>
typedef struct team_node
{
int data;
struct team_node *next;
}node_t;
static node_t *head;
static node_t *tail;
void in_team(int data)
{
node_t *new_node;
new_node = (node_t *) malloc(sizeof(node_t));
if(new_node == NULL)
printf("fail for malloc!");
memset(new_node, 0, sizeof(*new_node));
new_node->next = NULL;
new_node->data = data;
if(head == NULL)
{
head = new_node;
}
else
{
tail->next = new_node;
}
tail = new_node;
}
void out_team(void)
{
node_t *new_node;
if(head == NULL)
printf("the team is nothing!");
else
{
new_node = head;
head = new_node->next;
free(new_node );
}
}
void destroy_team(void)
{
if(head != NULL )
out_team();
}
void team_printf(void)
{
StackNode *p_node;
p_node = head;
if(p_node == NULL)
printf("队列为空!\n");
else
printf("队列数值为:");
while(p_node != NULL)
{
printf("%d ", p_node->data);
p_node = p_node->next;
}
}
int main(void)
{
team_printf();
in_team(1); in_team(2); in_team(3); in_team(4); in_team(5); in_team(6); in_team(7);
team_printf();
printf("\n");
printf("队头的数值为:%d ",head->data);
printf("\n");
out_team();
out_team();
printf("out_team剔除队列,");
team_printf();
printf("\n");
printf("队头的数值为:%d ",head->data);
printf("\n");
destroy_team();
return 1;
}
运行效果:
六、总结
对于我而言,结合了程序的内存分配来理解,这个更方便理清代码的逻辑,希望各位大佬在评论区批评指正!