循环队列

来源:互联网 发布:flexsim仿真软件 编辑:程序博客网 时间:2024/05/02 16:59
/***   循环队列实现*chenbdchenbd@gmail.com*/#include <stdio.h>#include <memory.h>#defineRING_BUF_LEN(5)#defineRING_BUF_OK(0x00)#defineRING_BUF_NG(0xff)#defineRING_BUF_INVALID_IDX(-1)#ifdef _DEBUG#define RING_BUF_DEBUG(x)x#else#defineRING_BUF_DEBUG(x)#endiftypedef struct{inti_head;int i_tail;inti_buf[RING_BUF_LEN];}S_RING_BUF_t;S_RING_BUF_t st_ring_buf;intring_buf_init(S_RING_BUF_t* ring_buf){int i_ret = RING_BUF_NG;if (NULL != ring_buf){ring_buf->i_head = ring_buf->i_tail = RING_BUF_INVALID_IDX;memset(ring_buf->i_buf, 0x00, sizeof(ring_buf->i_buf));i_ret = RING_BUF_OK;RING_BUF_DEBUG(printf("ring_buf: i_head = %08x, i_tail = %08x/n",ring_buf->i_head, ring_buf->i_tail));}return i_ret;}int ring_buf_insert(S_RING_BUF_t* ring_buf, int i_val){int i_ret = RING_BUF_NG;if (NULL != ring_buf){if (RING_BUF_INVALID_IDX == ring_buf->i_head){ring_buf->i_head = ring_buf->i_tail = 0;ring_buf->i_buf[ring_buf->i_head++] = i_val;i_ret = RING_BUF_OK;RING_BUF_DEBUG(printf("ring_buf: i_head = %08x, i_tail = %08x/n",ring_buf->i_head, ring_buf->i_tail));}else{if (((ring_buf->i_head + 1) % RING_BUF_LEN) != ring_buf->i_tail){ring_buf->i_buf[ring_buf->i_head] = i_val;ring_buf->i_head = ((ring_buf->i_head + 1) < RING_BUF_LEN) ? (ring_buf->i_head + 1) : /((ring_buf->i_head + 1) % RING_BUF_LEN);i_ret = RING_BUF_OK;RING_BUF_DEBUG(printf("ring_buf: i_head = %08x, i_tail = %08x/n",ring_buf->i_head, ring_buf->i_tail));}else{RING_BUF_DEBUG(printf("ring_buf:buf is full!!!/n"));}}}return i_ret;}int ring_buf_del(S_RING_BUF_t* ring_buf, int* i_out){int i_ret = RING_BUF_NG;if (NULL != ring_buf){if (RING_BUF_INVALID_IDX != ring_buf->i_tail){if (ring_buf->i_tail != ring_buf->i_head){if (NULL != i_out){*i_out = ring_buf->i_buf[ring_buf->i_tail];ring_buf->i_tail = ((ring_buf->i_tail + 1) < RING_BUF_LEN) ? (ring_buf->i_tail + 1) : /((ring_buf->i_tail + 1) % RING_BUF_LEN);i_ret = RING_BUF_OK;RING_BUF_DEBUG(printf("ring_buf: i_head = %08x, i_tail = %08x/n",ring_buf->i_head, ring_buf->i_tail));}}else{RING_BUF_DEBUG(printf("ring_buf:buf is empty!!!/n"));}}else{RING_BUF_DEBUG(printf("ring_buf:buf is empty!!!/n"));}}return i_ret;}int ring_buf_empty(S_RING_BUF_t* ring_buf){int i_ret = RING_BUF_NG;if (NULL != ring_buf){if (ring_buf->i_tail == ring_buf->i_head){i_ret = RING_BUF_OK;RING_BUF_DEBUG(printf("ring_buf:buf is empty!!!/n"));}}return i_ret;}int ring_buf_full(S_RING_BUF_t* ring_buf){int i_ret = RING_BUF_NG;if (NULL != ring_buf){if (((ring_buf->i_head + 1) % RING_BUF_LEN) == ring_buf->i_tail){i_ret = RING_BUF_OK;RING_BUF_DEBUG(printf("ring_buf:buf is full!!!/n"));}}return i_ret;}int main (void){int i_tmp;ring_buf_init(&st_ring_buf);ring_buf_insert(&st_ring_buf, 1);ring_buf_insert(&st_ring_buf, 2);ring_buf_insert(&st_ring_buf, 3);ring_buf_insert(&st_ring_buf, 4);ring_buf_insert(&st_ring_buf, 5);ring_buf_full(&st_ring_buf);ring_buf_del(&st_ring_buf, &i_tmp);ring_buf_del(&st_ring_buf, &i_tmp);ring_buf_del(&st_ring_buf, &i_tmp);ring_buf_del(&st_ring_buf, &i_tmp);ring_buf_del(&st_ring_buf, &i_tmp);ring_buf_empty(&st_ring_buf);return 0;}
原创粉丝点击