实现功能:
- 创建队
- 入队
- 出队
- 遍历队
代码实现:
//队列:先进先出,使用单链表实现
#include <stdio.h>
#include <stdlib.h>
//定义链表节点的结构体
typedef struct node_st
{
int data;
struct node_st *next;
}queue;
/*函数声明部分*/
queue *qu_create(); //创建队列
void qu_enqueue(queue *head,int data);//入队
int qu_dequeue(queue *head); //出队
void qu_print(queue *head); //遍历队
int main()
{
int ret1,ret2;
queue *head = qu_create(); //创建队
qu_enqueue(head,1);//入队
qu_enqueue(head,2);
qu_enqueue(head,3);
qu_enqueue(head,4);
qu_print(head); //遍历队
ret1 = qu_dequeue(head); //出队
ret2 = qu_dequeue(head);
printf("出队:%d %d\n",ret1,ret2);
qu_print(head);
return 0;
}
/*函数实现部分*/
//创建队列
queue *qu_create()
{
queue *head = malloc(sizeof(*head));//头节点
head->data = 0; //队列的长度
head->next = NULL;
return head;
}
//入队(尾插法)
void qu_enqueue(queue *head,int data)
{
queue *tail = head; //尾节点
queue *new = malloc(sizeof(*new));//新节点
new->data = data;//新节点的数据
int i = 0;
//循环找尾节点
while(tail->next != NULL)
//for(i=0;i<head->data;i++)
{
tail = tail->next;
}
new->next = tail->next;//新节点成为新尾节点,指针域指向NULL
tail->next = new;//旧的尾节点指向新的尾节点
head->data ++;//队列的长度+1
}
//出队(删除第1个有效节点)
int qu_dequeue(queue *head)
{
if(head->data==0) //队列为空
{
return 0;
}
else
{
queue *node = head->next;//第1个有效节点
int data = node->data;//保存数据
head->next = node->next;//删除node
free(node);
head->data --; //队列长度-1
return data; //返回删除的数据
}
}
//遍历队列
void qu_print(queue *head)
{
queue *node = head->next;//第1个有效节点
while(node) //当节点不为NULL时
{
printf("%d->",node->data);
node = node->next;
}
printf("NULL\n");
}
运行结果: