文章目录
前言
队列的特点:先进先出 |
普通队列
1.初始化
#include<stdio.h>
#include<stdlib.h>
#define maxlen 100
struct node
{
int elem[maxlen];
int front,rear;
}queue;
void Init()
{
queue.front=0;
queue.rear=0;
}
2.入队
void Push(int e)
{
if(queue.rear==maxlen-1)
{
printf("队满!");
}
else
{
queue.elem[queue.rear++]=e;
}
}
3.出队
int Pop()
{
if(queue.front==queue.rear)
{
printf("队空!");return -1;
}
else
{
int f=queue.elem[queue.front];
queue.elem[queue.front++]='\0';
return f;
}
}
4.测试
int main()
{
Init();
for(int i=1;i<=5;++i)
{Push(i);}
for(int i=1;i<=5;++i)
{printf("%d ",Pop());}
printf("\nfront=>%d rear=>%d",queue.front,queue.rear);
return 0;
}
输出
1 2 3 4 5
front=>5 rear=>5
循环队列
1.初始化
#include<stdio.h>
#include<stdlib.h>
#define maxlen 5
struct node
{
int elem[maxlen];
int front,rear;
}queue;
void Init()
{
queue.front=0;
queue.rear=0;
}
2.入队
void Push(int e)
{
if(((queue.rear+1)%maxlen)==queue.front)
{
printf("队满!");
}
else
{
queue.elem[queue.rear++]=e;
queue.rear%=maxlen;
}
}
3.出队
int Pop()
{
if(queue.front==queue.rear)
{
printf("队空!");return -1;
}
else
{
int f=queue.elem[queue.front];
queue.elem[queue.front++]='\0';
queue.front%=maxlen;
return f;
}
}
4.测试
int main()
{
Init();
Push(1);
Push(2);
Push(3);
Push(4);
Pop();
Pop();
Push(5);
int len=(queue.rear-queue.front+maxlen)%maxlen;
for(int i=1;i<=len;++i)
{
printf("%d ",Pop());
}
printf("\nfront=>%d rear=>%d",queue.front,queue.rear);
return 0;
}
输出
3 4 5
front=>0 rear=>0
链队列
参考本专栏单链表辅助理解
其中尾插法更适合这样的结构
入队走L,出队走queue
主要注意queue如何保持表头地位
以及L如何保持队尾地位
循环链队列
只需将L->next=queue即可
主要注意queue的位置没有元素
所以循环一遍回来后,记得再next一次
总结
栈和队列加入了链的元素后
其实和第一章链表大同小异
有高数和大物那味了,啊嘞 >_<
转载请与博主申明!