写了一个循环队列,大家看看

sxjkk 2009-10-31 05:58:18
一个集成插入、移除的循环队列,虽然比较简单,但是却很有用,代码如下


#include <stdio.h>

/** 队列大小 **/
int max_size;

/** 队首 **/
int front;

/** 队尾 **/
int rear;

/** 当前队列长度 **/
int nItem;

/** 队列数组 **/
int *queue = NULL;

/** 所有属性初始化 **/
void init(int maxsize)
{
max_size = maxsize;
queue = (int*)malloc(sizeof(int) * max_size);
front = 0;
rear = -1;
nItem = 0;
}

/** 新数据入队列 **/
void insert(int j)
{
if(rear == max_size - 1)
rear = -1;
queue[++rear] = j;
nItem++;
}

/** 得到队头的数据, 并且移除当前队头数据 **/
int _remove_()
{
int temp = queue[front++];
if(front == max_size)
front = 0;
nItem--;
return temp;
}

/** 得到队头的数据 **/
int peek_front()
{
return queue[front];
}

/** 队列是否为空,1为真,0为假 **/
int is_empty()
{
return nItem == 0;
}

/** 队列是否为满,1为真,0为假 **/
int is_full()
{
return nItem == max_size;
}

/** 释放队列 **/
void release()
{
free(queue);
queue = NULL;
}

int main()
{
init(10);

insert(10);
insert(20);
insert(30);
insert(40);

_remove_();
_remove_();
_remove_();

insert(50);
insert(60);
insert(70);
insert(80);

while(!is_empty())
{
int temp = _remove_();
printf("%d\n", temp);
}

release();
}




这段代码参考了《JAVA数据结构和算法》里面的循环队列的实现,以上是用C语言实现一个简单的循环队列
...全文
88 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
live_Sun 2011-05-05
  • 打赏
  • 举报
回复
为什么会有错呢,在Visual Studio中执行有很多错。。
jkgao 2009-10-31
  • 打赏
  • 举报
回复
学习一下思想
谢谢楼主
sxjkk 2009-10-31
  • 打赏
  • 举报
回复
可能实现队列的API有很多,关键是学习队列的中心思想
这个只是练习,实际中肯定选择已经实现的API
这不是鸭头 2009-10-31
  • 打赏
  • 举报
回复
不知道有什么用
都是使用STL

69,375

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧