資料結構基礎 佇列的實現

2021-10-05 05:27:56 字數 2457 閱讀 3492

佇列是程式開發中常用的結構。佇列具有先進先出(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 從隊尾入隊。若佇列不為空,將...