实验二 队列的基本功能实现

一、实验目的

1、掌握用 VC上机调试队列的基本方法;
2、掌握队列的基本操作,以顺序表示、链式表示两种存储方式实现队列的建立、插入、删除算法。

二、实验环境

1、PC微机;
2、Windows 操作系统;
3、VC6.0或以上

三、实验内容

在队列的顺序表示和链式表示两种方式中选择一种存储方式,实现队列的创建、插入、删除算法;编写程序、定义相应的变量,上机调式实现本次实验内容。

四、实验步骤、测试及结果

1.代码

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>#define ERROR  0
#define OK     1
#define TRUE   1
#define FALSE  0
#define QUEUESIZE 10typedef int Status;
typedef int QElemtype;typedef struct QNode{QElemtype *base;int front;int rear;
}SqQueue;//初始化
void InitQueue(SqQueue *Q)
{Q->base=(QElemtype*)malloc(sizeof(QElemtype)*QUEUESIZE);assert(Q->base!=NULL);Q->front=Q->rear=0;
}//入队
Status EnQueue(SqQueue *Q,QElemtype e)
{if(Q->rear==QUEUESIZE){return ERROR;}Q->base[Q->rear]=e;Q->rear++;return OK;
}//判断是否为空
Status QueueEmpty(SqQueue *Q)
{if(Q->front==Q->rear){return TRUE;}return FALSE;
}//求长度
Status QueueLength(SqQueue Q)
{return Q.rear-Q.front;
}//获取队头元素
Status GetHead(SqQueue *Q,QElemtype *e)
{if(Q->front==Q->rear){return ERROR;}*e=Q->base[Q->front];return OK;
}//销毁
void DestoryQueue(SqQueue *Q)
{if(Q->base)      //队列Q存在 {free(Q->base);}Q->base=NULL;Q->front=Q->rear=0;
}//清空void ClearQueue(SqQueue *Q)
{Q->front=Q->rear=0;
}//出队
Status DeQueue(SqQueue *Q,QElemtype *e)
{if(Q->front==Q->rear){return ERROR;}*e=Q->base[Q->front];Q->front++;return OK;
}//遍历
void QueueTraverse(SqQueue Q,void(*visit)(QElemtype))
{int i=Q.front;while(i!=Q.rear){visit(Q.base[i]);i++;}printf("\n");
}
void Print(QElemtype e)
{printf("%d ",e);
}
//主函数
int main()
{QElemtype i,e,d;SqQueue Q;InitQueue(&Q);printf("请输入队列的%d个元素:\n",QUEUESIZE);for(i=0;i<QUEUESIZE;i++){scanf("%d",&d);EnQueue(&Q,d);}printf("队列的元素为:");QueueTraverse(Q,Print);printf("队列长度为:%d\n",QueueLength(Q));int k=QueueLength(Q);printf("连续%d次由对头删除元素,队尾插入元素:\n",k/2);for(i=0;i<k/2;i++){DeQueue(&Q,&e);printf("删除的队列的元素是:%d,请输入插入的元素:",e);scanf("%d",&d);EnQueue(&Q,d);}printf("新的队列元素为:\n");QueueTraverse(Q,Print);int n=GetHead(&Q,&e);if(n)printf("对头元素为:%d\n",e);else {printf("队空!\n"); return -1;}ClearQueue(&Q);printf("清空队列后队列是否为空:%d\t(1:为空 ,0:不为空)\n",QueueEmpty(&Q));DestoryQueue(&Q);printf("销毁队列后:\nQ.base=%u\tQ.front=%d\tQ.rear=%d\t\n",Q.base,Q.front,Q.rear);return 0;
}
  1. 运行结果

五、实验小结

1.队列是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。允许插入的端是队尾,允许删除的端是队头。
2. 顺序存储就是用数组实现,比如有一个n个元素的队列,数组下标0的一端是队头,入队操作就是通过数组下标一个个顺序追加,不需要移动元素,但是如果删除队头元素,后面的元素就要往前移动,对应的时间复杂度就是O(n)。

数据结构:实验二 队列的基本功能实现相关推荐

  1. 数据结构实验二——队列(银行叫号系统)

    一.实验目的 (1)掌握队列的链式存储结构 (2)掌握队列的基本操作,并能进行应用实践 (3)使用C/C++语言和队列实现"银行叫号系统"专题 二.实验任务 设计一个控制台程序,模 ...

  2. 数据结构实验二 :二叉树的操作与实现

    数据结构实验一:线性表,堆栈和队列实现 数据结构实验二 :二叉树的操作与实现 数据结构实验三: 图的操作与实现 数据结构实验四 : 查找和排序算法实现 文章目录 一.实验目的: 二.使用仪器.器材 三 ...

  3. sdut 2135 数据结构实验之队列一:排队买饭

    数据结构实验之队列一:排队买饭 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem Descriptio ...

  4. 数据结构实验二 树和二叉树的实现

    广州大学学生实验报告 开课实验室:计算机科学与工程实验(电子楼418A)     2019年5月13日 学院 计算机科学与教育软件学院 年级.专业.班 计算机科学与技术172班 姓名 学号 17061 ...

  5. 数据结构-实验二  树和二叉树的实现

     广州大学学生实验报告 开课实验室:计算机科学与工程实验(电子楼417)     2018年05月16日 学院 计算机科学与教育软件学院 年级.专业.班 网络161 姓名 卟咚君 学号 1606100 ...

  6. 线性表基本操作,单链表的建立(头插法,尾插法)、插入、删除、遍历操作的实现(c++ 数据结构 实验二)

    大学数据结构课程的实验题目,掌握线性表的链接存储结构,用c++语言描述 一.实验要求 1.分别用头插法和尾插法建立一个含有若干结点的单链表 2.对已建立的单链表进行插入.删除.遍历输出等操作 二.代码 ...

  7. 数据结构实验二:迷宫的求解

    Exp02 迷宫的求解 Author: Maskros 实验目的 输入迷宫,得到从入口到出口的(最短)路径 实验内容与要求 迷宫只有两个门,一个叫做入口,另一个叫做出口.把一只老鼠从一个无顶盖的大盒子 ...

  8. 南京邮电大学数据结构实验二(代码篇)

    文章目录 一.二叉树的创建和遍历 二.二叉树求解 三.哈夫曼树 一.二叉树的创建和遍历 #include<stdio.h> #include<stdlib.h> #define ...

  9. 数据结构实验之队列一:排队买饭

    Problem Description 中午买饭的人特多,食堂真是太拥挤了,买个饭费劲,理工大的小孩还是很聪明的,直接奔政通超市,哈哈,确实,政通超市里面也卖饭,有好几种菜,做的比食堂好吃多了,价格也 ...

  10. 数据结构实验二(C语言):银行排队系统

    银行排队系统 [问题描述]假设银行只有2个窗口对外营业,顾客到银行办理业务,首先要取一个顺序号,然后排队等待叫号.被叫到号的顾客到柜台接受服务,服务完毕后离开.到了下班时间不再接收新来的顾客.顾客分为 ...

最新文章

  1. mimind(思维导图软件)中文版
  2. php 折叠菜单,SlashdotMenu 折叠菜单
  3. linux 函数 增加用户,linux常用c函数用户组有哪些?
  4. javascript对象包含哪些要素_javascript有哪几种对象?
  5. 阿里云弹性计算负责人蒋林泉:亿级场景驱动的技术自研之路 | 问底中国 IT 技术演变...
  6. Linq简单语句记录
  7. mongodb 复制(副本集)
  8. Linux常用的查找命令总结
  9. 解决Windows10系统更新后自带的记事本不见了
  10. 辉哥基于android S 分析过度动画以及窗口动画
  11. 技嘉 AORUS RTX2080显卡光线追踪技术详解
  12. 函数式思维: 运用函数式思维,第2 部分
  13. android psensor测试,android传感器Gsensor和Psensor的使用举例
  14. NOIP训练 czy的后宫6(线性dp)
  15. Android 组件化代码中心化问题之.api化方案
  16. 移动文件后图标变白解决方法
  17. WINDOWS 系统错误代码
  18. 华为算法工程师面试经历汇总
  19. 开年纳新|天空卫士家族荣誉谱上再添多名新“成员”
  20. 《跨语言文本相似性检测》第一周—前期调研

热门文章

  1. 面具更新自定义_面具Magisk如何从稳定版切换到测试版,面具版本切换教程
  2. (day 45 - 中序遍历 ) 剑指 Offer 54. 二叉搜索树的第k大节点
  3. django 轮播图上传_拼多多规则更新:关于【商品轮播图】你所不知道的秘密!...
  4. android多线程计时器,Android 计时器Timer用法
  5. JavaWeb:HTTP、Request、Response
  6. Javascript特效:天猫导航
  7. 电子邮件是html文件吗,如何在电子邮件正文中嵌入HTML文件
  8. 怎么锁定计算机密码忘了怎么办,电脑在控制面板被锁密码忘记怎么开呢?
  9. linux系统下,traceroute路由跟踪指令详解
  10. 算法笔记_面试题_20.数组相关_模板及示例十几道