CN101034346A - 一种循环队列的数据存储方法 - Google Patents
一种循环队列的数据存储方法 Download PDFInfo
- Publication number
- CN101034346A CN101034346A CN 200610057353 CN200610057353A CN101034346A CN 101034346 A CN101034346 A CN 101034346A CN 200610057353 CN200610057353 CN 200610057353 CN 200610057353 A CN200610057353 A CN 200610057353A CN 101034346 A CN101034346 A CN 101034346A
- Authority
- CN
- China
- Prior art keywords
- queue
- pointer
- round
- head pointer
- robin
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明所述的循环队列的数据存储方法在循环队列存储数据过程中,将新的数据元素从队尾插入队列尾指针指向的循环队列中,同时将队列尾指针加1;且当队列尾指针等于队列头指针时,将队列头指针加1。这一过程在执行时需判断队列尾指针是否等于队列头指针,如是,将队列头指针加1,否则,不进行任何操作。
Description
技术领域
本发明涉及软件技术领域,尤其涉及一种循环队列的数据存储方法。
背景技术
如图1所示:队列(queue)是一种先进先出(first in first out,缩写为FIFC)的线性表,它只允许在表的一端进行插入,而在另一端删除元素。在队列中允许插入的一端叫做队尾(rear),允许删除的一端则称为队头(front)。对于循环队列,在队列的顺序存储结构中,除了用一组地址连续的存储单元依次存放从队列头到队列尾的元素之外,尚需附设两个指针q_front和q_rear分别指示队列头元素及队列尾元素的位置。
在C语言中,初始化建空队列时,令q_front=q_rear=0,每当插入新的队列尾元素时,“尾指针增1”;每当删除队列头元素时,“头指针增1”。因此,在非空队列中,头指针时钟指向队列头元素,而尾指针始终指向队列尾元素的下一个位置。
队列尾元素不停插入,当队列尾指针追上队列头指针时,则队列空间均被占满,此时q_front==q_rear,当队列中的元素相继从队列中删除,队列呈空状态,此时也存在关系式q_front==q_rear,由此可见,只凭等式q_front==q_rear无法判别队列空间是“满”还是“空”。为解决这个问题,有以下三种常用方法:
1、另设一个标志位已区别队列是“满”还是“空”;
这种方法的缺点是多用了一个变量。
2、以q_front==q_rear为队列空的判断依据;
这种方法的缺点是当队列尾指针追上队列头指针时,将会丢失队列全部的元素。
3、以队列头指针在队列尾指针的下一个位置上,作为队列呈“满”状态的标志;
这种方法的缺点是当队列满时,新元素将被丢掉,当新元素有效性大于旧元素时,则不满足删除旧元素,储存新元素的需求。
发明内容
本发明的目的是提供一种循环队列的数据存储方法,不使用额外的变量标志队列的状态;便可保证当队列尾指针追上头指针时,保存新数据,删除旧数据。
本发明的目的是通过以下技术方案实现的:
一种循环队列的数据存储方法,包括:
在循环队列存储数据过程中,将新的数据元素从队尾插入队列尾指针指向的循环队列中,同时将队列尾指针加1;且当队列尾指针等于队列头指针时,将队列头指针加1。
所述的方法包括:
在循环队列存储数据过程中,判断队列尾指针是否等于队列头指针,如是,将队列头指针加1。
由上述本发明提供的技术方案可以看出,本发明所述的循环队列的数据存储方法在循环队列存储数据过程中,将新的数据元素从队尾插入队列尾指针指向的循环队列中,同时将队列尾指针加1;且当队列尾指针等于队列头指针时,将队列头指针加1。这一过程在执行时需判断队列尾指针是否等于队列头指针,如是,将队列头指针加1,否则,不进行任何操作。
附图说明
图1为队列的示意图;
图2为本发明提供的一种循环队列的数据存储方法的流程图。
具体实施方式
本发明的核心是在循环队列存储数据过程中,将新的数据元素从队尾插入队列尾指针指向的循环队列中,同时将队列尾指针加1;且当队列尾指针等于队列头指针时,将队列头指针加1。这一过程在执行时需判断队列尾指针是否等于队列头指针,如是,将队列头指针加1,否则,不进行任何操作。具体的过程如图2所示:
步骤21、系统将新的数据元素从队尾插入队列尾指针指向的循环队列中;
步骤22、系统将队列尾指针加1;
步骤23、判断队列尾指针是否等于队列头指针,如是,执行步骤24。否则,不进行任何操作,继续判断。
步骤24、系统将队列头指针加1。
这时当新的数据元素从队尾插入,最新的元素覆盖了最旧的元素。以下是实例说明:
#define MAX_QUEUE_SIZE 100 //最大队列长度
//定义一个队列
unsigned char queue[MAX_QUEUE_SIZE];
unsigned char q_front;
unsigned char q_rear;
//初始化队列
q_front=q_rear=0;
//删除元素时队列头指针的算法
q_front=(++q_front)%MAX_QUEUE_SIZE;
//插入元素时队列指针的算法
q_rear=(++q_rear)%MAX_QUEUE_SIZE;
if(q_rear==q_front)
q_front=(++q_front)%MAX_QUEUE_SIZE;
可见,本发明在节省队列状态变量、队列新元素有效性大于旧元素及最少丢失数据的前提下,提供了一种新的队列状态的表示方法。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。
Claims (2)
1、一种循环队列的数据存储方法,其特征在于,包括:
在循环队列存储数据过程中,将新的数据元素从队尾插入队列尾指针指向的循环队列中,同时将队列尾指针加1;且当队列尾指针等于队列头指针时,将队列头指针加1。
2、根据权利要求1所述的循环队列的数据存储方法,其特征在于,所述的方法包括:
在循环队列存储数据过程中,判断队列尾指针是否等于队列头指针,如是,将队列头指针加1。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200610057353 CN101034346A (zh) | 2006-03-10 | 2006-03-10 | 一种循环队列的数据存储方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200610057353 CN101034346A (zh) | 2006-03-10 | 2006-03-10 | 一种循环队列的数据存储方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101034346A true CN101034346A (zh) | 2007-09-12 |
Family
ID=38730919
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 200610057353 Pending CN101034346A (zh) | 2006-03-10 | 2006-03-10 | 一种循环队列的数据存储方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101034346A (zh) |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102508784A (zh) * | 2011-11-02 | 2012-06-20 | 杭州海康威视数字技术股份有限公司 | 视频监控设备中闪存卡的数据存储方法及其系统 |
CN101576884B (zh) * | 2008-05-07 | 2013-03-20 | 中兴通讯股份有限公司 | 断链缓存文件管理的实现方法 |
CN103166873A (zh) * | 2011-12-12 | 2013-06-19 | 中兴通讯股份有限公司 | 核间通信的方法及核处理器 |
CN103514177A (zh) * | 2012-06-20 | 2014-01-15 | 盛趣信息技术(上海)有限公司 | 数据存储方法及系统 |
CN103645863A (zh) * | 2013-12-12 | 2014-03-19 | 北京奇虎科技有限公司 | 共享内存的数据读取方法和系统、写入方法和系统 |
CN104461917A (zh) * | 2014-12-05 | 2015-03-25 | 宁波新尚智能电气有限公司 | 基于Nor Flash的区域循环存储方法 |
CN105075202A (zh) * | 2013-03-28 | 2015-11-18 | 英国电讯有限公司 | 用于队列控制的分组的重标记 |
CN107346289A (zh) * | 2016-05-05 | 2017-11-14 | 北京自动化控制设备研究所 | 一种用循环队列缓冲数据的方法 |
CN108959354A (zh) * | 2018-05-04 | 2018-12-07 | 北京小米移动软件有限公司 | 数据处理方法、装置及服务器 |
CN109480810A (zh) * | 2018-10-09 | 2019-03-19 | 江西师范大学 | 一种基于循环队列的脉搏信号纠错方法 |
US10469393B1 (en) | 2015-08-06 | 2019-11-05 | British Telecommunications Public Limited Company | Data packet network |
US10645016B2 (en) | 2015-08-06 | 2020-05-05 | British Telecommunications Public Limited Company | Data packet network |
-
2006
- 2006-03-10 CN CN 200610057353 patent/CN101034346A/zh active Pending
Cited By (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101576884B (zh) * | 2008-05-07 | 2013-03-20 | 中兴通讯股份有限公司 | 断链缓存文件管理的实现方法 |
CN102508784B (zh) * | 2011-11-02 | 2015-01-07 | 杭州海康威视数字技术股份有限公司 | 视频监控设备中闪存卡的数据存储方法及其系统 |
CN102508784A (zh) * | 2011-11-02 | 2012-06-20 | 杭州海康威视数字技术股份有限公司 | 视频监控设备中闪存卡的数据存储方法及其系统 |
CN103166873A (zh) * | 2011-12-12 | 2013-06-19 | 中兴通讯股份有限公司 | 核间通信的方法及核处理器 |
CN103514177A (zh) * | 2012-06-20 | 2014-01-15 | 盛趣信息技术(上海)有限公司 | 数据存储方法及系统 |
CN105075202A (zh) * | 2013-03-28 | 2015-11-18 | 英国电讯有限公司 | 用于队列控制的分组的重标记 |
US9985899B2 (en) | 2013-03-28 | 2018-05-29 | British Telecommunications Public Limited Company | Re-marking of packets for queue control |
CN103645863B (zh) * | 2013-12-12 | 2017-12-08 | 北京奇安信科技有限公司 | 共享内存的数据读取方法和系统、写入方法和系统 |
CN103645863A (zh) * | 2013-12-12 | 2014-03-19 | 北京奇虎科技有限公司 | 共享内存的数据读取方法和系统、写入方法和系统 |
CN104461917A (zh) * | 2014-12-05 | 2015-03-25 | 宁波新尚智能电气有限公司 | 基于Nor Flash的区域循环存储方法 |
US10469393B1 (en) | 2015-08-06 | 2019-11-05 | British Telecommunications Public Limited Company | Data packet network |
US10645016B2 (en) | 2015-08-06 | 2020-05-05 | British Telecommunications Public Limited Company | Data packet network |
CN107346289A (zh) * | 2016-05-05 | 2017-11-14 | 北京自动化控制设备研究所 | 一种用循环队列缓冲数据的方法 |
CN108959354A (zh) * | 2018-05-04 | 2018-12-07 | 北京小米移动软件有限公司 | 数据处理方法、装置及服务器 |
CN109480810A (zh) * | 2018-10-09 | 2019-03-19 | 江西师范大学 | 一种基于循环队列的脉搏信号纠错方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101034346A (zh) | 一种循环队列的数据存储方法 | |
US20060288047A1 (en) | Method for bulk deletion through segmented files | |
WO2006009618A2 (en) | Memory compression architecture for embedded systems | |
WO2007138603A3 (en) | Method and system for transformation of logical data objects for storage | |
CN106557272B (zh) | 一种高效的传感器历史数据归档方法 | |
CN101751246A (zh) | 预取数据的系统和方法 | |
EP2074511B1 (en) | Efficient store queue architecture | |
CN106503051A (zh) | 一种基于元数据分类的贪婪预取型数据恢复系统及恢复方法 | |
CN1295279A (zh) | 在处理系统中用于执行堆栈弹出与压入操作的装置和方法 | |
CN106201778B (zh) | 信息处理方法及存储设备 | |
CN1264096C (zh) | 一种fifo存储器的数据处理方法 | |
CN109753446A (zh) | 一种存储系统下刷缓存数据的方法 | |
US7266650B2 (en) | Method, apparatus, and computer program product for implementing enhanced circular queue using loop counts | |
US7484068B2 (en) | Storage space management methods and systems | |
CN102270179B (zh) | 用于cad系统的基于片元的数据存储和处理方法及其系统 | |
KR101574275B1 (ko) | 그래픽 파이프라인을 위한 효율적인 상태 관리 | |
US8904032B2 (en) | Prefetch optimization of the communication of data using descriptor lists | |
US10552075B2 (en) | Disk-image deduplication with hash subset in memory | |
US8341376B1 (en) | System, method, and computer program for repartitioning data based on access of the data | |
GB2486905A (en) | Amalgamating instructions by replacing unencoded space | |
US8838544B2 (en) | Fast history based compression in a pipelined architecture | |
CN102882515A (zh) | 连续提取和包装比特数据流的装置 | |
CN104461942B (zh) | 串流上下文的高速缓存系统 | |
CN111159064B (zh) | 一种低复杂度数据块缓存方法 | |
CN101067821A (zh) | 用于处理顺序文件的方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |