队列学习笔记 循环队列

 //循环队列
//CycQueue.h
#define QUEUEMAX 15
typedef struct 
{
	DATA data[QUEUEMAX];  //队列数组 
	int head; //队头 
	int tail; //队尾 
}CycQueue;
CycQueue *CycQueueInit ()
{
	CycQueue *q;
	if(q=(CycQueue *)malloc(sizeof(CycQueue))) //申请保存队列的内存 
	{
		q->head = 0;  //设置队头 
		q->tail = 0; //设置队尾 
		return q;
	}else
		return NULL; // 返回空 
}
void CycQueueFree(CycQueue *q)  // 释放队列 
{
	if(q!=NULL)
		free(q);
}
int CycQueueIsEmpty(CycQueue *q)  // 队列是否为空 
{  
	return  (q->head==q->tail) ;
}
int CycQueueIsFull (CycQueue *q) // 队列是否已满 
{
	return ((q->tail+1)%QUEUEMAX == q->head) ;
}
int CycQueueIn(CycQueue *q,DATA data)  // 入队函数
{
	if((q->tail+1)%QUEUEMAX == q->head)
	{
		printf("队列已满!\n");
		return 0;
	}else{
		q->tail = (q->tail+1)%QUEUEMAX; //求列尾序号 
		q->data[q->tail]  = data;
		return 1;
	}
 } 
DATA *CycQueueOut (CycQueue *q) // 循环队列的出队函数 
{
	if(q->head == q->tail)
	{
		printf("队列已空!\n");
		return NULL; 
	}else{
		q->head=(q->head+1)%QUEUEMAX;
		return &(q->data[q->head]);
	} 
 } 
 int CycQueueLen(CycQueue *q)  // 获取队列长度 
 {
 	int n;
 	n=q->tail-q->head;
 	if(n<0)
 		n=QUEUEMAX + n;
 	return n;
  } 
DATA *CycQueuePeek(CycQueue *q) // 获取队列中第1个位置的数据 
{
	if(q->head==q->tail)
	{
		printf("队列已经为空!\n");
		return NULL;
	}else{
		return &(q->data[(q->head+1)%QUEUEMAX]);
	}
}
时间: 2024-10-11 08:22:30

队列学习笔记 循环队列的相关文章

队列学习笔记 顺序队列

//顺序队列操作 #define QUEUEMAX 15 typedef struct  { DATA data[QUEUEMAX]; // 队列数组  int head;   //队头  int tail;   // 队尾   } SeqQueue; SeqQueue *SeqQueueInit() { SeqQueue *q; if(q=(SeqQueue *)malloc(sizeof)(SeqQueue))   // 申请保存队列的内存  { q->head = 0;  // 设置队头 

数据结构学习之循环队列(顺序存储)

[摘要]队列特性:先进先出(FIFO)--先进队列的元素先出队列.来源于我们生活中的队列(先排队的先办完事). 这样有个缺陷,空间利用率不高,所以我们直接学习循环队列(基于连续内存的). (1)设计队列数据结构 typedef struct _QUEUE_NODE { int* pData; int length;//队列长度 int head ;//队头指针 int tail;//队尾指针 int count;//队列元素当前个数 }QUEUE_NODE; (2)申请队列内存 QUEUE_NO

队列学习笔记 银行排号程序

 //循环队列  //CycQueue.h #define QUEUEMAX 15 typedef struct  { DATA data[QUEUEMAX];  //队列数组  int head; //队头  int tail; //队尾  }CycQueue; CycQueue *CycQueueInit () { CycQueue *q; if(q=(CycQueue *)malloc(sizeof(CycQueue))) //申请保存队列的内存  { q->head = 0;  //设置

python 3.x 学习笔记16 (队列queue 以及 multiprocessing模块)

1.队列(queue) 用法: import queue q = queue.Queue() #先进先出模式 q.put(1) #存放数据在q里 作用: 1)解耦    2)提高效率 class queue.Queue(maxsize=0)                        #先入先出class queue.LifoQueue(maxsize=0)                  #后进先出 class queue.PriorityQueue(maxsize=0)         

39 _ 队列5 _ 循环队列需要几个参数来确定 及其含义的讲解.swf

上面讲解都是循环队列,如果是链表实现的话就很简单,队列只有循环队列才比较复杂 此时队列中只存储一个有效元素3,当在删除一个元素的时候,队列为空,pFont向上移动,pFont等于pRear,但是此时pFont的值不为null 1.下面分析下如何向队列中添加元素 我们添加元素的时候只有在pRear的地方添加,pRear向上移动 上面这种情况,pRear已经指向了数组的最尾部分,此时添加数据的时候,pRear不能继续向上加1,执行6的位置,这个时候会出现内存溢出,pRear要执行到数组的0位置第一个

08 队列的顺序存储---循环队列

方法:用数组 + 头指针 + 尾指针 实现的,从尾部插入,从头部删除,先进先出的,FIFO. 循环队列中数据,比数组少1.

Windows消息队列学习笔记

1.windows消息和消息结构 一条消息是作为一个结构传递给应用程序的,这个结构中,包含了消息号,消息的类型,字参数和长字参数等信息.结构定义如下: typedef struct tagMSG { HWND hwnd; UINT message; WPARAM wParam; LPARAM lParam; DWORD time; POINT pt; } MSG; 第一个成员变量hwnd表示消息所属的窗口.在Windows程序中,用HWND类型的变量来标识窗口. 第二个成员变量message指定

FreeRTOS学习笔记7-FreeRTOS 队列相关

在实际的应用中,常会遇到一个任务或者断服需要和另外进 在实际的应用中,常会遇到一个任务或者断服需要和另外进 行"沟通交流", 行"沟通交流", 行"沟通交流", 这个"沟通交流"的过程其实就是消息传递 这个"沟通交流"的过程其实就是消息传递 这个"沟通交流"的过程其实就是消息传递 这个"沟通交流"的过程其实就是消息传递 的过程.在 的过程.在 没有操作系统的时候两个应

RHCA学习笔记:RH442-Unit5 队列原理

NIT 5 Queuing Theory 队列原理 目标: 1.明白性能调优的关键术语 2. 应用队列技术解决性能问题 3.明白性能调优的复杂性 5.1    Introduction to queuing theory 队列原理简介 A.      Little’s Law 给出了队列原理的基础 John Little于1961年用数学证明了这个原理. B.      带来的好处: a.       可以用工程学方法来进行性能管理. b.       量化系统未来的性能 c.       说明