29 迴圈佇列的基本操作實現

2021-08-20 19:39:06 字數 2666 閱讀 9605

circularqueue.h檔案

#ifndef circularqueue_h

#define circularqueue_h

#include

#include

#include

#define max_size 5

//定義佇列資料結構

typedef

struct circularqueue

circularqueue;

//初始化佇列

circularqueue *init_circularqueue();

//銷毀佇列

void free_circularqueue(circularqueue *queue);

//佇列是否為空

int isempty_circularqueue(circularqueue *queue);

//入佇列

void insert_circularqueue(circularqueue *queue , void *data);

//出佇列

void *remove_circularqueue(circularqueue *queue);

#endif

circularqueue.c檔案

#include "circularqueue.h"

//初始化佇列

circularqueue *init_circularqueue()

queue->front = 0;

queue->rear = 0;

return

queue;

}//銷毀佇列

void free_circularqueue(circularqueue *queue)

free(queue);

queue = null;

}//佇列是否為空

int isempty_circularqueue(circularqueue *queue)

//隊列為空返回0,不為空返回1

if(queue->front == queue->rear)

return1;}

//入佇列

void insert_circularqueue(circularqueue *queue , void *data)

//判斷佇列是否已滿

if( (queue->rear + 1) % max_size == queue->front )

//資料元素入隊

queue->rear = (queue->rear + 1) % max_size;

queue->data[queue->rear] = data;

}//出佇列

void *remove_circularqueue(circularqueue *queue)

//隊列為空

if(queue->rear == queue->front)

//資料元素出隊

queue->front = (queue->front + 1) % max_size;

return

queue->data[queue->front];

}

main.c檔案

#include "circularqueue.h"

typedef

struct student

student;

int main(void)

; student s2 = ;

student s3 = ;

student s4 = ;

printf("---------------入隊--------------\n\n");

//入隊

insert_circularqueue(queue , (void *)&s1);

insert_circularqueue(queue , (void *)&s2);

insert_circularqueue(queue , (void *)&s3);

insert_circularqueue(queue , (void *)&s4);

printf("---------------出隊--------------\n");

//輸出佇列

//注意:迴圈佇列的陣列空間大小定義為5,但實際上迴圈佇列能儲存的資料元素大小只有4

//也就是說,當我們在進行入隊時,佇列中的資料元素的個數不能超過4,否則將會陣列越界

int i;

for(i = 0; i < max_size - 1; i++)

printf("---------------釋放佇列--------------\n");

//釋放佇列

free_circularqueue(queue);

return

0;}

測試結果:

雖然在定義迴圈佇列的陣列儲存空間大小是5,但實際上迴圈佇列的儲存空間大小只有4,如果超過4則會導致陣列越界。

迴圈佇列的基本操作實現

front 指向隊頭元素的前乙個單元 rear 指向隊尾元素 maxsize 陣列的最大長度 元素入隊的時候,將隊尾的指標加1,然後元素入隊 元素出隊時,先將對頭指標加1,然後元素出隊。隊頭指標進1 front front 1 maxsize 隊尾指標進1 rear rear 1 maxsize 在...

迴圈佇列及其基本操作的實現

public inte ce iqueue public class circlesqqueue implements iqueue 將乙個已經存在的佇列置成空 public void clear 測試佇列是否為空 public boolean isempty 求佇列中的資料元素個數並由函式返回其值...

迴圈佇列基本操作

include include include include define ok 1 define error 0 define maxsize 4 分配的最大空間 typedef struct que queuelink int initloopqueue queuelink 初始化迴圈佇列 i...