快捷搜索:  汽车  科技

数据结构列表和队列(数据结构---队列复习)

数据结构列表和队列(数据结构---队列复习)3.队列算法2.循环静态队列出队静态队列通常都必须是循环队列,来提高数组的利用率。如果要删除元素(出队),f 只能加(往数组最大下标方向增加);如果要增加元素(入队), r 只能加(往数组最大下标方向增加)。非循环的话出队列后的内存就无法再入队列,浪费内存。循环队列需要几个参数来确定?---front和rear,front 代表的是队列的第一个元素,rear 代表的是队列的最后一个有效元素的下一个元素。1.静态队列出队

1.队列定义:一种可以实现先进先出的存储结构,类似于排队买票。

2.队列分类:

(1)静态队列:用数组实现

(2)链式队列:用链表实现

静态队列通常都必须是循环队列,来提高数组的利用率。如果要删除元素(出队),f 只能加(往数组最大下标方向增加);如果要增加元素(入队), r 只能加(往数组最大下标方向增加)。非循环的话出队列后的内存就无法再入队列,浪费内存。

循环队列需要几个参数来确定?---front和rear,front 代表的是队列的第一个元素,rear 代表的是队列的最后一个有效元素的下一个元素。

数据结构列表和队列(数据结构---队列复习)(1)

1.静态队列出队

数据结构列表和队列(数据结构---队列复习)(2)

2.循环静态队列出队


3.队列算法

//静态队列,用循环数组 //队列的两个参数:front、rear typedef struct Queue { int* pBase; //数组 int front;//队列头 int rear;//队列尾 }QUEUE;

3.1队列初始化,front 和 rear 的值都是零。

//队列初始化 void init_queue(struct Queue* pQ) { pQ->pBase = (int*)malloc(sizeof(int)*6);//数组分配6个int型内存 pQ->front = 0;//队列头下标为0 pQ->rear = 0;//队列尾下标为0 }

3.2如何判断队列已满:如果 r 和 f 的值紧挨着,则队列已满,n - 1 个元素可以被使用(分配6个内存,使用5个存数据,剩余一个用作队列判断)。

//队列是否满了 int full_queue(struct Queue* pQ) {//队列满时 rear / front 紧挨着,由于是循环所以对数组长度取余 if ((pQ->rear 1)%6 == pQ->front) { return 0; } return -1; }

3.3队列是否为空,队列尾与队列头相同则为空。

//队列是否为空,队列尾与队列头相同则为空 int empty_queue(QUEUE* pQ) { if (pQ->front == pQ->rear) { return 0; } return -1; }

3.4遍历队列

//遍历队列 void travserse_queue(QUEUE* pQ) {//从队列头开始,直至队列尾 int i = pQ->front;//获取队列头 while (i != pQ->rear) {//是否到队尾 printf("%d " pQ->pBase[i]);//输出数据 i = (i 1) % 6; } printf("\n"); return; }

3.5入队,两步完成:

1).将值存入 r 所代表的位置

2).r=(r 1)% 数组的长度

//入队,往队列放值 //哪个队列,值为多少 int en_queue(struct Queue* pQ int val) { if (full_queue(pQ) == 0) {//队列满了 return -1; } else { pQ->pBase[pQ->rear] = val;//val值放入队列的尾 pQ->rear = (pQ->rear 1) % 6;//队尾上移 1,因循环队列,故对数组长度取余 } return 0; }

3.6出队

//出队列,先保存队列值,再将队头上移 int out_queue(QUEUE* pQ int* pVal) { if (empty_queue(pQ) == 0) { return -1; } *pVal = pQ->pBase[pQ->front];//保存要出队列的值 pQ->front = (pQ->front 1) % 6;//循环队列% return 0; }

4.调试代码与结果

#include "stdio.h" #include "stdlib.h" #include "string.h" #include "malloc.h" #include "queue.h" int main() { ////////////////////////////queue.c test //////////////////////// struct Queue Q; int val; init_queue(&Q);//初始化队列 en_queue(&Q 1);//进队列 en_queue(&Q 2); en_queue(&Q 3); en_queue(&Q 4); en_queue(&Q 5); printf("入队后的结果:\n"); travserse_queue(&Q);//遍历输出队列 if (out_queue(&Q &val) == 0) { printf("出队列成功,队列出队元素是:%d\n" val); } else { printf("出队列失败!\n"); } travserse_queue(&Q);//遍历输出队列 //////////////////////////// queue.c test end //////////////////////// return 0; }

数据结构列表和队列(数据结构---队列复习)(3)

3.代码调试结果

猜您喜欢: