数据结构与算法实验报告四—— 队列的实现

1 篇文章 0 订阅
1 篇文章 0 订阅

第一章实验目的

1.掌握队列的表示和实现方法。
2.掌握队列基本操作的算法实现。
3.了解队列的应用。

第二章 实验环境

硬件环境要求:
PC机(单机)
使用的软件名称、版本号以及模块:
DEV C++、VS2010等。

第三章 实验内容

本实验主要介绍常见的数据结构queue。

第四章实验步骤

#include  < iostream>
#include  < algorithm>    
using namespace std;
#define ERROR 0  
#define OK 1  
#define OVERFLOW  - 2
#define MAXSIZE 100  
typedef int QElemType;
typedef struct 
{
    QElemType * base;
    int front;
    int rear;
 }SqQueue;

int InitQueue(SqQueue & Q)  //初始化队列
{
	    Q.base  = new QElemType[MAXSIZE];
	    if (!Q.base) exit(OVERFLOW);
	    Q.front  = Q.rear  = 0;
	    return OK;
	}

int EnQueue(SqQueue & Q, QElemType e)  //插入队列元素
{
	    if ((Q.rear  + 1) % MAXSIZE  == Q.front)
		        return ERROR;
	    Q.base[Q.rear] = e;
	    Q.rear  = (Q.rear  + 1) % MAXSIZE;
	    return OK;
	}

int DeQueue(SqQueue & Q)   //删除队头元素
{
	    if (Q.front  == Q.rear)
		        return ERROR;
	    Q.front  = (Q.front  + 1) % MAXSIZE;
	    return OK;
	}

void PrintQueue(SqQueue & Q)  //输出队列
{
	    cout  << "队列中的元素为:";
    for (int i  = 0; i  < (Q.rear  - Q.front  + MAXSIZE) % MAXSIZE; i++)
		        cout  << Q.base[(Q.front  + i) % MAXSIZE] << ' ';
	    cout  << endl;
	}

int main()
{
	    SqQueue q;
	    InitQueue(q);
	    for (int i  = 0; i  < 8; i++)   
		    {
		        int e;
		        cin  >> e;
		        EnQueue(q, e);
		   }
	    cout  << "初始时";
	    PrintQueue(q);
	
		   int arr[MAXSIZE], index  = 0;  //定义数组暂存数据
	    for (int i  = 0; i  < (q.rear  - q.front  + MAXSIZE) % MAXSIZE; i++)
		        arr[index++] = q.base[(q.front  + i) % MAXSIZE];
	    sort(arr, arr  + 8);  //对arr排序  
	
		    for (int i  = 0; i  < 8; i++)  //将排好的数组元素插入队列 
		    {
		        EnQueue(q, arr[i]);
		        DeQueue(q);
		    }
	    cout  << "调整后";
	    PrintQueue(q);
	
		    return 0;
	}

运行结果:
在这里插入图片描述

实验感悟:
实验的关键步骤在于如何将乱序的有顺序的排列在队列的情况下排列有序。再者为判断队空队满的条件和循环终止的条件是相对不容易理解的。本次实验借鉴了别的同学的实验代码,因为我自己写不出来。

  • 1
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值