佇列是程式開發中常用的結構。佇列具有先進先出(fifo的特點,在很多時候我們可以用佇列來模擬一片緩衝區來實現資料的緩衝。下面是乙個簡單的佇列實現。
#ifndef ringfifo_h_included
#define ringfifo_h_included
#ifdef __cplusplus
extern "c" ringfifo_t;
#ifndef null
#define null ((void *)0)
#endif // null
ringfifo_t *createstaticringfifo(datatype *mem,int fifosize);
int deletedynamicringfifo(ringfifo_t ** fifo);
ringfifo_t *createdynamicringfifo(int fifosize);
int deletestaticringfifo(ringfifo_t ** fifo);
int getringfifolength(ringfifo_t *fifo);
int pushelemtoringfifo(ringfifo_t *fifo,datatype *elem);
int popelemfromringfifo(ringfifo_t *fifo,datatype *elem);
#ifdef __cplusplus
}#endif // __cplusplus
#endif // ringfifo_h_included
#include "ringfifo.h"
#include #include #include #define __debug__use__
ringfifo_t *createstaticringfifo(datatype *mem,int fifosize)
else
return p;
}ringfifo_t *createdynamicringfifo(int fifosize)
else
return p;
}int deletestaticringfifo(ringfifo_t ** fifo)
free(*fifo);
*fifo=null;
return 0;
}int deletedynamicringfifo(ringfifo_t ** fifo)
free((*fifo)->space);
free(*fifo);
*fifo=null;
return 0;
}int getringfifolength(ringfifo_t *fifo)
int pushelemtoringfifo(ringfifo_t *fifo,datatype *elem)
fifo->space[fifo->tail]=*elem;
fifo->tail=(fifo->tail+1)%fifo->fifo_size;
return 0;
}int popelemfromringfifo(ringfifo_t *fifo,datatype *elem)
else return -1;
}
#include #include "cstdio"
#include #include #include "ringfifo.h"
using namespace std;
void my_strcpy(char *to,const char *from);
int main()
printf("getringfifolength(fifo1) = %d\r\n",getringfifolength(fifo1));
while(0 == popelemfromringfifo(fifo1,&elem))
printf("\r\n");
printf("getringfifolength(fifo1) = %d\r\n",getringfifolength(fifo1));
deletedynamicringfifo(&fifo1);
return 0;
}
執行結果:
getringfifolength(fifo1) = 9
abcdefghi
getringfifolength(fifo1) = 0
process returned 0 (0x0) execution time : 0.416 s
press any key to continue.
從上面的**可以看出,建立乙個佇列可以用使用者提供的記憶體空間(一般是陣列空間),也可以是動態分配的空間,使用者可根據實際需要選擇一種合適的方式。
此外,對於容量為n的佇列,最大可以儲存的元素數量為n-1。
資料結構與演算法 基礎資料結構 佇列實現
在學習佇列的實現過程中,跟著教程自己手寫了佇列的實現,理解佇列的先進先出原理。以及略微複雜的迴圈佇列形成的乙個閉環,略微吃力,還需努力,詳細說明在注釋 package com.zhouyou.queue 普通佇列的實現 public class arrayqueue public void push...
基礎資料結構 之 佇列(python實現)
隊也是程式設計開發中常見的一種資料結構。棧和隊可用來模擬函式的遞迴過程。隊的特點為先入先出,主要操作包括入隊和出隊。入隊時需判斷隊是否已滿,出隊時需判斷隊是否為空。下面給出乙個隊的python實現的例子 class queue object def init self,size 8 self.que...
資料結構基礎 單調佇列
單調佇列一般是具有單調性的佇列,單調佇列有單調遞增和單調遞減兩種,一般來講,佇列的隊首是整個佇列的最大值或最小值,它的思想也是在決策集合 佇列 中及時排除一定不是最優解的選擇。單調佇列是優化動態規劃的乙個重要手段。具體實現步驟 維護單調單調遞增佇列 若隊列為空,將s i 從隊尾入隊。若佇列不為空,將...