佇列的模擬實現 c語言

2021-10-24 02:24:36 字數 2977 閱讀 3023

test.c

#define _crt_secure_no_warnings 1

#include

"queues.h"

intmain()

queues.c

#include

"queues.h"

#include

#include

#include

#include

#include

typedef

struct

mycircularqueue;

//採用陣列實現

bool mycircularqueueisempty

(mycircularqueue* obj)

;bool mycircularqueueisfull

(mycircularqueue* obj)

;//注意加上函式宣告

mycircularqueue*

mycircularqueuecreate

(int k)

mycircularqueue* obj =

(mycircularqueue*

)malloc

(sizeof

(mycircularqueue));

if(obj ==

null

) obj->data =

(int*)

malloc

(k *

sizeof

(int))

;if(obj->data ==

null

)//賦各項初值

obj->front = obj->rear =0;

obj->size = k;

obj->flag =0;

return obj;

}bool mycircularqueueenqueue

(mycircularqueue* obj,

int value)

obj->data[obj->rear]

= value;

//插入資料

obj->rear =

((obj->rear +1)

< obj->size)

?(obj->rear +1)

:0;//判斷是否到達陣列邊界,且尾指標+1

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

return true;

}bool mycircularqueuedequeue

(mycircularqueue* obj)

obj->data[obj->front]=0

;//清除隊頭的資料

obj->front =

((obj->front +1)

< obj->size)

?(obj->front +1)

:0;//判斷是否到達陣列邊界,且頭指標+1

obj->flag =0;

//只要刪除了元素,佇列就不可能滿

return true;

}int

mycircularqueuefront

(mycircularqueue* obj)

return obj->data[obj->front];}

intmycircularqueuerear

(mycircularqueue* obj)

int i =

(obj->rear ==0)

?(obj->size -1)

:(obj->rear -1)

;//尾指標指向的是末尾資料的下乙個位置,此處避免陣列越界

return obj->data[i];}

bool mycircularqueueisempty

(mycircularqueue* obj)

else

}bool mycircularqueueisfull

(mycircularqueue* obj)

else

}void

mycircularqueuefree

(mycircularqueue* obj)

queues.h

#pragma once

//防止重複包含

#include

typedef

struct

mycircularqueue;

//採用陣列實現

bool mycircularqueueisempty

(mycircularqueue* obj)

;bool mycircularqueueisfull

(mycircularqueue* obj)

;//注意加上函式宣告

mycircularqueue*

mycircularqueuecreate

(int k)

;bool mycircularqueueenqueue

(mycircularqueue* obj,

int value)

;bool mycircularqueuedequeue

(mycircularqueue* obj)

;int

mycircularqueuefront

(mycircularqueue* obj)

;int

mycircularqueuerear

(mycircularqueue* obj)

;bool mycircularqueueisempty

(mycircularqueue* obj)

;bool mycircularqueueisfull

(mycircularqueue* obj)

;void

mycircularqueuefree

(mycircularqueue* obj)

;

C 模擬實現迴圈順序佇列

c 中也會經常用的線性表鍊錶,對比各自特點,線性表更適合完成棧的操作,因為線性表實際是陣列完成的,資料依次挨著排放,不需要前插把資料依次後移。而鍊錶更適合佇列的操作,而鍊錶為了方便資料的尾插,頭刪,推出了帶頭節點的迴圈佇列。一下就是實現 帶頭的迴圈順序佇列 include using namespa...

C語言 模擬實現memcpy

模擬實現記憶體拷貝函式memcpy 該特點與strcpy 比較就是不管是不是string型別均可以比較,只是單純記憶體的比較。void my memcpy void p1,const void p2,size t count char dest char p1 char src char p2 si...

C語言模擬實現strncpy strcat

模擬實現strncpy 先演示一下strncpy的效果 如下 include include void main void 執行結果 通過以上演示可以看出,strncpy實現的是用乙個固定的字串去替換原字串中的某段字元,可以設定乙個迴圈,來實現字元的替換,如果它只有乙個字元要替換,則迴圈執行一次,設...