线性结构的两种常见应用
队列
定义
一种可以实现“先进先出”的存储结构
分类
链式队列 --用链表实现
静态队列 --用数组实现
静态队列通常使用循环队列实现的
循环队列:
1、静态队列为什么必须是循环队列
注意: f:头部,r:尾部的下一个节点 。
避免浪费空间,反复利用内存
2、循环队列需要几个参数来确定
front :指向第一个元素
rear: 指向最后一个有效元素的下一个
3、循环队列的个各参数的含义
4、循环队列入队伪算法
操作:
将值存入real所代表的位置
r=(r+1)%数组长度
5、循环队列出队伪算法
f=(f+1)%数组长度
6、如果判断循环队列已满
1、 多增加一个参数位
2、少用一个元素
7、如果判断循环队列为空
front = rear
#include <stdio.h> typedef struct Queue { int * pBase; //数组的首地址 int front; int rear; }QUEUE; void init(QUEUE * pQ) { pQ->pBase = (int *) malloc(sizeof(int)*6); pQ->front =0; pQ-rear =0; } bool out_queue(QUEUE *pQ ; int * pVal) { if(emput_queue(pQ)) { return false; } *pVal =pQ->pBase[pQ->front]; pQ->front = (pQ->front+1)%6; } emput_queue() { if(pQ->font==pQ->rear) { return true; } return false; } //入队 bool en_queue(QUEUE * pQ ,int pVal) { if(full_queue(pQ)) { printf("队列已经满了"); return false; } else { pQ->pbase[pQ->rear] = pVal; pQ->rear = (pQ->rear+1)% 6; return true; } } bool full_queue(QUEUE * pQ ) { if((pQ->rear+1)%6 == pQ->front) { true; } esle { false; } } void traverse-queue(QUEUE * pQ) { int i =pQ->front; while(i!=pQ->rear) { printf("输出元素"); i=(i+1)%6; } } int main () { QUEUE Q; init(&Q); return 0; }