动态数组实现的队列
来源:互联网 发布:尿液发红什么原因知乎 编辑:程序博客网 时间:2024/06/04 19:00
/*_############################################################################
_##
_## 动态数组实现的队列
_## Author: xwlee
_## Time: 2006.12.31
_## Chang'an University
_## Development condition: win2003 Server+VC6.0
_##
_## dynamic_array.cpp 文件
_##########################################################################*/
#include "stack.h"
#include <stdio.h>
// 用于存储队列元素的指针和指向队列头和尾的指针
static QUEUE_TYPE *queue;
static size_t queue_size; // 队列的大小
static size_t front = 1;
static size_t rear = 0;
static size_t qnumber = 0; // 引入新变量,记录队列中的元素数量(方法1)
// create_queue函数
int create_queue( size_t size )
{
if( queue_size != 0)
{
printf("create queue is false,try again./n");
exit(0);
}
queue_size = size;
//queue = ( QUEUE_TYPE * )malloc( (queue_size+1) * sizeof( QUEUE_TYPE ) ); // 方法2
queue = ( QUEUE_TYPE * )malloc( queue_size * sizeof( QUEUE_TYPE ) ); // 方法1
if( queue == NULL )
{
printf("malloc is false,try again./n");
return 0;
}
return 1;
}
// destroy_queue函数
int destroy_queue( void )
{
if( queue_size == 0)
{
printf("destroy queue is false./n");
exit(0);
}
queue_size = 0;
free( queue );
queue = NULL;
return 1;
}
// insert函数
void myinsert( QUEUE_TYPE value )
{
if( is_full() )
{
printf("queue is already full, insert is false./n");
exit(0);
}
//rear = ( rear + 1 ) % (queue_size+1); // 方法2
rear = ( rear + 1 ) % (queue_size); // 方法1
queue[ rear ] = value;
printf("rear=%d", rear);
qnumber++; // 引入新变量使用.(方法1)
}
// delete函数
void mydelete( void )
{
if( is_empty() ) // 若队列已空,条件成立.
{
printf("queue already empty, delete is false./n");
exit(0);
}
//front = ( front + 1 ) % (queue_size+1); // 方法2
front = ( front + 1 ) % (queue_size); // 方法1
printf("front=%d", front);
qnumber--; // 引入新变量使用.(方法1)
}
// first函数
QUEUE_TYPE first( void )
{
if( is_empty() ) // 若队列已空,条件成立.
{
printf("queue already empty./n");
exit(0);
}
return queue[ front ];
}
// is_empty函数
int is_empty( void )
{
//return ( rear +1 ) % (queue_size+1) == front; // 方法2
return qnumber == 0; // 引入新变量使用. 方法1
}
// is_full函数
int is_full( void )
{
//return ( rear +2 ) % (queue_size+1) == front; // 方法2
return qnumber == (queue_size); // 引入新变量使用. 方法1
}
_##
_## 动态数组实现的队列
_## Author: xwlee
_## Time: 2006.12.31
_## Chang'an University
_## Development condition: win2003 Server+VC6.0
_##
_## dynamic_array.cpp 文件
_##########################################################################*/
#include "stack.h"
#include <stdio.h>
// 用于存储队列元素的指针和指向队列头和尾的指针
static QUEUE_TYPE *queue;
static size_t queue_size; // 队列的大小
static size_t front = 1;
static size_t rear = 0;
static size_t qnumber = 0; // 引入新变量,记录队列中的元素数量(方法1)
// create_queue函数
int create_queue( size_t size )
{
if( queue_size != 0)
{
printf("create queue is false,try again./n");
exit(0);
}
queue_size = size;
//queue = ( QUEUE_TYPE * )malloc( (queue_size+1) * sizeof( QUEUE_TYPE ) ); // 方法2
queue = ( QUEUE_TYPE * )malloc( queue_size * sizeof( QUEUE_TYPE ) ); // 方法1
if( queue == NULL )
{
printf("malloc is false,try again./n");
return 0;
}
return 1;
}
// destroy_queue函数
int destroy_queue( void )
{
if( queue_size == 0)
{
printf("destroy queue is false./n");
exit(0);
}
queue_size = 0;
free( queue );
queue = NULL;
return 1;
}
// insert函数
void myinsert( QUEUE_TYPE value )
{
if( is_full() )
{
printf("queue is already full, insert is false./n");
exit(0);
}
//rear = ( rear + 1 ) % (queue_size+1); // 方法2
rear = ( rear + 1 ) % (queue_size); // 方法1
queue[ rear ] = value;
printf("rear=%d", rear);
qnumber++; // 引入新变量使用.(方法1)
}
// delete函数
void mydelete( void )
{
if( is_empty() ) // 若队列已空,条件成立.
{
printf("queue already empty, delete is false./n");
exit(0);
}
//front = ( front + 1 ) % (queue_size+1); // 方法2
front = ( front + 1 ) % (queue_size); // 方法1
printf("front=%d", front);
qnumber--; // 引入新变量使用.(方法1)
}
// first函数
QUEUE_TYPE first( void )
{
if( is_empty() ) // 若队列已空,条件成立.
{
printf("queue already empty./n");
exit(0);
}
return queue[ front ];
}
// is_empty函数
int is_empty( void )
{
//return ( rear +1 ) % (queue_size+1) == front; // 方法2
return qnumber == 0; // 引入新变量使用. 方法1
}
// is_full函数
int is_full( void )
{
//return ( rear +2 ) % (queue_size+1) == front; // 方法2
return qnumber == (queue_size); // 引入新变量使用. 方法1
}
- 动态数组实现的队列
- 队列的动态数组实现
- 动态数组实现队列
- 基于动态数组的队列实现
- 数据结构队列之环形队列的动态数组实现:queue
- 动态数组实现循环队列
- 动态数组实现循环队列
- 基础知识--数组、栈、队列的静态、动态和链式实现
- Java数组实现可以动态增长的队列
- 队列的数组实现
- 队列的数组实现
- 队列的数组实现
- 队列的数组实现
- 队列的数组实现
- 队列的数组实现
- 数组实现的队列
- 队列的数组实现
- 队列的数组实现
- 设置列表框最小宽度且可随着内容变宽的方法
- hibernate的一个异常错误分析
- 猪年到了,我的天下...
- 一些符号图
- 一个队列模块的接口 动态数组
- 动态数组实现的队列
- 将文件放入数据库,操作TBlobField
- hibernate不支持这样的继承映射
- 明天生日。。。。。。……^_^
- DetachedCriteria的createCriteria(String associationPath,String alias)方法有bug
- oracle的char类型引起的问题
- java 泛型
- javascript中删除字符串空格的方法
- DTS参数传递