#include <stdio.h>
#include <malloc.h>
我们先理解什么是队列
其实就相当于单链条
它遵循先进先出
它是用两个指针(头指针和尾指针)
一开始让两个指针都指向队列的头部
在读入数据的过程中
用尾指针来依次指向要读入数据的位置
在读出数据的过程中
用头指针来依次指向要读出数据的位置
差不多就是这样了
其实如果了解了链表和链条基本的东西
队列很容易掌握
现在实现链式队列
typedef struct list 这里实现 链
{
int value;
struct list *next;
}List;
typedef struct queue 这里实现队列
{
List *head;
List *tail;
}Queue;
void init(Queue *queue) 初始化队列
{
queue->head = NULL;
queue->tail = NULL;
}
int add(Queue *queue,int value) 读入数值
{
List *p = (List*)malloc(sizeof(List));
p->value = value;
p->next = NULL;
if(queue->head == NULL)
queue->head = queue->tail = p;
else
{
queue->tail->next = p;
queue->tail = p;
}
return 1; 基本上和链条的读入数值差不多
}
int out(Queue *queue) 读出数值,要从头部读出遵循先进先出的顺序
{
List *p = queue->head;
if(p == NULL) 预判一下空队列
return 1;
int value = p->value;
queue->head = p->next;
free(p); 每次读出值之后这个p所指的空间就没有用了 要释放掉
return value;
}
int isempty(Queue *queue)判断是否为空队列
{
return queue->head == queue->tail ;
}
int count(Queue *queue)
{
return queue->count;
}
int main()
{
Queue queue;
init(&queue);
int count;
printf("请输入你要读入多少个数据:\n");
scanf("%d",&count);
for(int i = 0; i < count;i++)
{
printf("请输入第%d个数据\n",i+1);
int value;
scanf("%d",&value);
add(&queue,value);
}
两中输出方法
int ccount;
printf("请输入你要读出多少个数据:\n");
scanf("%d",&ccount);
for(int k = 0; k < ccount; k++)
{
printf("现在读出第%d个数据%d\n",k+1,out(&queue));
}
while(!isempty(&queue))
{
printf("%5d",out(&queue));
}
printf("%5d",out(&queue));
return 0;
}