佇列的實現

2021-08-20 08:01:55 字數 2153 閱讀 3762

佇列,也稱 fifo(first in first out ),佇列在隊尾插入資料,在對頭刪除資料,即這兩個操作要在兩端分別操作。實現很簡單,直接上**

#include #include #include #include "hi3531/include/playrtmp/dataqueue.h"

queue* createqueue()   //建立佇列

q->front = q->rear = (qnode*)malloc(sizeof(qnode));

if(q->front == null)

if(0 != pthread_mutex_init(&q->mutex,null))    //初始化互斥鎖

if( 0 != pthread_cond_init(&q->wake_event, null))

q->front->next = null;

return q;

}void destroyqueue(queue * pqueue)

while (pqueue->front != null)

pthread_mutex_destroy(&pqueue->mutex);

free(pqueue);

pqueue = null;

}int isemptyqueue(queue* q)

else

}//從隊尾插入資料

void inqueue(queue *pqueue, unsigned char  *in_buf, int buf_lenth) //入隊

if(pqueue == null)

pthread_mutex_lock(&pqueue->mutex);

qnode * node = (qnode *)malloc(sizeof(qnode));   //非空佇列,建立乙個節點

node->data = (unsigned char *)malloc( buf_lenth /*strlen(in_buf)*/ );

memcpy(node->data, in_buf, buf_lenth /*strlen(in_buf)*/ );

node->ilenth = buf_lenth;

node->next = null;

pqueue->rear->next = node;

//佇列往後移動

pqueue->rear = node;

pthread_cond_signal(&pqueue->wake_event);

pthread_mutex_unlock(&pqueue->mutex);

}//從隊頭輸出資料

qnode* outqueue(queue *pqueue)   //出隊

pthread_mutex_lock(&pqueue->mutex);

qnode* node = null;

node = pqueue->front->next;

pqueue->front->next = node->next;

if(pqueue->rear == node)

pqueue->rear = pqueue->front;

pthread_mutex_unlock(&pqueue->mutex);

return node;

}//for test

int main_test(void)

destroyqueue(q);

return 0;

}

下面是標頭檔案

#ifndef dataqueue_h

#define dataqueue_h

#include typedef struct queue_nodeqnode;

typedef struct queuequeue;

queue* createqueue();   //建立佇列

void destroyqueue(queue * pqueue);  //銷毀佇列

void inqueue(queue *pqueue, unsigned char *in_buf, int buf_lenth); //入隊

qnode* outqueue(queue *pqueue);   //出隊

#endif // dataqueue_h

佇列實現 佇列的鏈式結構實現

佇列的實現,用單鏈表實現佇列的結構 1 初始化建立佇列 2 釋放佇列 3 清空佇列 4 計算佇列長度 5 判斷佇列是否為空 6 列印佇列元素 7 入隊操作 隊尾插入 8 出隊操作 隊首刪除 include typedef int datatype struct qnode struct lqueue...

佇列的實現(一)順序佇列的實現

佇列 只能一端進行出棧一端進行進棧。隊首 只允許進行出棧操作,可以進行刪除。隊尾 只允許進行入棧操作,可以進行插入。隊尾進,隊尾出,先進先出。所以佇列的實現也有兩種形式,一種是陣列實現佇列,一種是用鍊錶實現佇列。首先是用陣列來實現佇列。使用陣列佇列,因為在刪除時front會越來越大,所以最後會出現一...

佇列 迴圈佇列的實現

為了可以重新利用佇列底層陣列中已刪除元素所佔的空間,消除可能出現的 假滿 現象,將順序佇列改進為迴圈佇列。迴圈佇列是首尾相連的佇列 當front rear變數達到底層陣列的capacity 1之後,再向前以為就變成0.入隊 1 判斷佇列是否已滿,已滿丟擲越界異常 2 不滿的話把元素查到隊尾,並且re...