队列举例
更新时间:2024-05-31 06:43:01 阅读量: 综合文库 文档下载
队列举例
【例1】 假设以数组Q[m]存放循环队列中的元素, 同时以rear和length分别指示环形队列中的队尾位置和队列中所含元素的个数。试给出该循环队列的队空条件和队满条件, 并写出相应的插入(enqueue)和删除(dlqueue)元素的操作。 【解答】
循环队列类定义
template
Queue ( int=10 );
~Queue ( ) { delete [ ] elements; } int EnQueue ( Type & item ); Type *DeQueue ( ); Type *GetFront ( );
void MakeEmpty ( ) { length = 0; }
//置空队列 //判队列空否 //判队列满否
int IsEmpty ( ) const { return length == 0; } private:
int rear, length; int maxSize; }
template
Queue
//建立一个最大具有maxSize个元素的空队列。 elements = new Type[maxSize];
//创建队列空间
//队尾指针和队列长度 //存放队列元素的数组 //队列最大可容纳元素个数
Type *elements;
//循环队列的类定义
int IsFull ( ) const { return length == maxSize; }
构造函数
if (elements == NULL)
{cerr<<\动态存储分配失败!\endl;exit (1);}
}
template
int Queue
}
template
Type *Queue
插入函数
if (IsFull ( )) {cerr<<\队列已满,不能入队列!\endl; return 0;} //判队列满则
length++;
//长度加1 //队尾位置进1 //进队列
出错处理
rear = ( rear +1) % maxSize; elements[rear] = item;
return 1;
删除函数
if (IsEmpty ( ))return NULL; //判断队列是否为空,空则返回NULL
length--;
//队列长度减1
1
return &elements[(rear-length+maxSize) % maxSize];
}
template
Type *Queue
}
//返回原队头元素的地址
读取队头元素值函数
if (IsEmpty ( ))return NULL; //判断队列是否为空,空则返回NULL
return &elements[(rear-length+1+maxSize) % maxSize];
//返回队头元素的地址
【例2】 假设以数组Q[m]存放循环队列中的元素, 同时设置一个标志tag,以tag == 0和tag == 1来区别在队头指针(front)和队尾指针(rear)相等时,队列状态为“空”还是“满”。试编写与此结构相应的插入(enqueue)和删除(dlqueue)算法。 【解答】
循环队列类定义
template
Queue ( int=10 ); ~Queue ( ) { delete [ ] Q; } int EnQueue ( Type & item ); Type *DeQueue ( ); Type *GetFront ( );
void MakeEmpty ( ) { front = rear = tag = 0; }
//置空队列
//判队列空否
int IsEmpty ( ) const { return front == rear && tag == 0; } private:
int rear, front, tag; Type *Q; int m; }
template
Queue
//建立一个最大具有m个元素的空队列。 Q = new Type[m];
//创建队列空间
//队尾指针、队头指针和队满标志
//存放队列元素的数组 //队列最大可容纳元素个数
//循环队列的类定义
int IsFull ( ) const { return front == rear && tag == 1; } //判队列满否
构造函数
if (Q == NULL)
{cerr<<\动态存储分配失败!\endl;exit (1);}
}
template
int Queue
插入函数
if (IsFull ( )) {cerr<<\队列已满,不能入队列!\endl; return 0;} //判队列满则
rear = ( rear + 1 ) % m; Q[rear] = item;
//队尾位置进1, 队尾指针指示实际队尾位置 //进队列
出错处理
2
}
tag = 1; //标志改1,表示队列不空,因为入队只会变满
return 1;
位置
删除函数
template
Type *Queue
if (IsEmpty ( ))return NULL; //判断队列是否为空,空则返回NULL
front = ( front + 1 ) % m; tag = 0;
//队头位置进1, 队头指针指示实际队头的前一//标志改0, 表示栈不满,因为出队只会变空
//返回原队头元素的地址
return &Q[front];
}
template
读取队头元素函数
Type *Queue
if (IsEmpty ( ))return NULL; //判断队列是否为空,空则返回NULL
return &Q[(front + 1) % m];
//返回队头元素的地址
【例3】 若使用循环链表来表示队列,p是链表中的一个指针。试基于此结构给出队列的插入(enqueue)和删除(dequeue)算法,并给出p为何值时队列空。 【解答】 链式队列的类定义
template
Queue ( ) : p ( NULL ) { } ~Queue ( );
//构造函数
//将item加入到队列中 //删除并返回队头元素 //查看队头元素的值
//置空队列,实现与~Queue ( ) 相同
//析构函数
//链式队列类定义
template
QueueNode ( Type d = 0, QueueNode *l = NULL ) : data (d), link (l) { } };
//构造函数
//数据域 //链域
QueueNode
//链式队列类的前视定义 //链式队列结点类定义
template
void EnQueue ( const Type & item ); Type DeQueue ( ); Type GetFront ( );
void MakeEmpty ( ); private:
QueueNode
int IsEmpty ( ) const { return p == NULL; }
//判队列空否
//队尾指针(在循环链表中)
3
};
template
while ( p != NULL ) { s = p; p = p->link; delete s; } //逐个删除队列中的结点 }
template
void Queue
if ( p == NULL ) { }
//队列不空, 新结点链入p之后 //结点p指向新的队尾
QueueNode
//队列空, 新结点成为第一个结点
//队列的析构函数
队列的析构函数
队列的插入函数
p = new QueueNode
else {
}
}
队列的删除函数
template
if ( p == NULL ) { cout << \队列空, 不能删除!\endl; return 0; } if (p->link==p) {
Type retvalue = p->data; delete p; 为空
p=NULL; }
return retvalue;
//返回数据
//若为唯一一个结点,则删除后队列
点
QueueNode
p->link = s->link; }
//队头结点为p后一个结点
//重新链接, 将结点s从链中摘下 //保存原队头结点中的值, 释放原队头结//返回数据
Type retvalue = s->data; delete s; return retvalue;
队空条件 p == NULL。
4
正在阅读:
队列举例05-31
2013年台州市统计继续教育试题05-21
论导游人员的职业操守01-08
土木工程实践要求本科04-16
小奶牛设计 说课03-29
集团两节具体终端方案9.12_更新05-25
JohnHull《期货、期权和衍生证券》13章习题解答04-16
高中生班主任兼数学老师推荐信范文03-29
2017中国历史人文地理(上)期末答案09-21
早上好的心情语录11-20
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 队列
- 举例
- 2013会计继续教育最全答案四(会计基础)
- 篮球积分器
- 土地增值税清算管理规程
- 打造魅力班会课
- 树立五大发展理念,应对复杂挑战
- 山东省日照市2014年初中学业水平模拟测试(四)数学试题
- 2010年公务员行政能力测试真题及解析
- 摘要 综述了近年来核磁共振波谱技术在高分子材料方面的应用
- 四川省职教师资培训计划(三)
- 某生活污水MBR膜处理方案每天200吨介绍
- 《化工原理》第四版习题答案
- 八年级数学讲学稿 12.2.1 12
- 三菱菱云故障码
- 元代版六十七幅推背图
- 如何做好国企人力资源工作
- 新人教版小学数学四年级下册《乘法运算定律》教学设计及点评
- 基于PLC全自动洗衣机控制系统
- 基于PLC的风力发电控制系统设计
- 第四版计算机基础选择题参考答案
- 浙江省14—15学年数学(北师大版)二年级上册期中易错题(无答案