单向链表最基本的结构是有 数据 和指向下一节点的地址;
头文件
#ifndef QUEUE_LIST_INCLUDE
#define QUEUE_LIST_INCLUDE
#include<sys/types.h>
/*节点*/
typedef struct Queue_node{
int data;/*数据*/
struct Queue_node* next;
/*下一节点的地址*/
}QUEUE_NODE;
/*队列*/
typedef struct queue_l{
/*头和尾*/
QUEUE_NODE* front;
QUEUE_NODE* rear;
}QUEUE_LIST;
/*初始化队列*/
void queue_init(QUEUE_LIST *queuee);
/*销毁队列*/
void queue_deinit(QUEUE_LIST *queue);
/*判空*/
int queue_empty(QUEUE_LIST *queue);
/*入队*/
void queue_push(QUEUE_LIST *queue,int data);
/*出队*/
int queue_pop(QUEUE_LIST *queue);
/*输出队首*/
int queue_front(QUEUE_LIST *queue);
/*元素数量*/
size_t queue_size(QUEUE_LIST *queue);
#endif
源文件实现调用函数并编译运行
#include"queue_list.h"
#include<stdio.h>
#include<stdlib.h>
/*分配添加创建节点内存*/
QUEUE_NODE* create_node(int data)
{
QUEUE_NODE* node=malloc(sizeof(QUEUE_NODE));
node->data=data;
node->next=NULL;
return node;
}
/*删除节点*/
QUEUE_NODE* destory_node(QUEUE_NODE *node)
{
/*先存下一节点地址后释放内存,最后返回下一节点地址*/
QUEUE_NODE *next= node->next;
free(node);
return next;
}
/*初始化队列*/
void queue_init(QUEUE_LIST *queue)
{
queue->front=NULL;
queue->rear=NULL;
}
/*清除队列*/
void queue_deinit(QUEUE_LIST *queue)
{
while(queue->front)
queue->front=destory_node(queue->front);
queue->rear=NULL;
}
/*判空*/
int queue_empty(QUEUE_LIST *queue)
{
return !queue->front && !queue->rear;
}
/*入队*/
void queue_push(QUEUE_LIST *queue,int data)
{
QUEUE_NODE* rear=create_node(data);
/*尾部有节点*/
if(queue->rear)
{
queue->rear->next=rear;
}
/*队列为空此节点为第一个,尾和头都是此节点*/
else
queue->front=rear;
queue->rear=rear;
}
/*出队*/
int queue_pop(QUEUE_LIST *queue)
{
int data=queue->front->data;
/*输出数据,并且判断队列是否为空,*/
if(!(queue->front=destory_node(queue->front)))
{
queue->rear=NULL;
}
return data;
}
/*输出队首*/
int queue_front(QUEUE_LIST *queue)
{
return queue->front->data;
}
/*输出队列元素数量*/
size_t queue_size(QUEUE_LIST *queue)
{
size_t size=0;
/*此节点用于遍历队列*/
QUEUE_NODE *find=queue->front;
for(;find;find=find->next)
size++;
return size++;
}
int main()
{
int i;
QUEUE_LIST queue_list;
queue_init(&queue_list);
for(i=0;i<5;i++)
{
queue_push(&queue_list,i+1);
printf("%d",i+1 );
}
printf("\n");
printf("队首为:%d\n",queue_front(&queue_list));
printf("数量为:%d\n",queue_size(&queue_list));
printf("出队为:\n");
while(!queue_empty(&queue_list))
printf("%d\n",queue_pop(&queue_list));
queue_deinit(&queue_list);
return 0;
}