数据结构队列算法实现中的队列插入和查找怎么实现啊。插入不是插入队尾,而是任意位置。查找要返回地址。

当前位置: >>
队列是一种在程序开发中十分常用的数据结构
队列是一种在程序开发中十分常用的数据结构, 在此我就以编写一个实 现队列功能的类--Queue 为例进行说明。该类将实现以下基本运算: 判断队列是否为空:empty() 插入队列(即在队列未尾增加一个数据元素):inqueue(x) 出队列(也就是将队列首数据元素删除):outqueue() 取列头(也就是读者队列首数据元素的值):gethead() 清空队列(也就是将队列的所有数据元素全删除): clear() 查询 x 在队列中的位置:search(x) 测试案例分析 在测试驱动开发实践中,第一步就是考虑测试方案,通过分析该类 的功能,我们可以得到以下测试案例: 1) 队列为空测试 TC01: 队列新建时,应为空; TC02: 清空队列后,应为空; TC03: 当出队列操作次数与插入队列操作次数一样时,应为 空; 2) 插入队列测试: TC04: 插入队列操作后,新数据元素将插入在队列的未尾; TC05: 插入队列操作后,队列将一定不为空; 3) 出队列测试 TC06: 出队列操作后,第一个数据元素将被从队列中删除; 4) 取队头测试 TC07: 取队头操作将获得队列中的第一个数据元素。 5) 清空队列测试 TC08: 清空队列操作后,队列将为空队列; 注: 此处为了讲解的方便,并未将所有的测试用例都列出,同时也 选择了一些十分简单的测试用例。 第一次迭代 我们首先编写第一个测试代码,这一测试代码只考虑了测试案例 T C01, 也就是保证新建的队列为空: import junit.framework.*; //每个使用 JUnit 编写的测试代码都应该包括本行 public class testQueue extends TestCase //创建一个测试用例,继承 TestCase { protected Queue q1; public static void main (String[] args) { junit.textui.TestRunner.run (suite()); //执行测试用例 } protected void setUp() //环境变量准备 { q1= new Queue(); } public static Test suite() //通用格式,指定测试内容 { return new TestSuite(testQueue.class); } public void testEmpty() //以下每个方法就是一个测试 { assertTrue(q1.empty()); //当队列新建时,应为空-TC01 } } 安装 JUnit 十分简单,只需在 www.junit.org 中下载最新的软件 包(ZIP 格式), 然后将其解压缩,并且将&JUnit 安装目录/junit.ja r& 以及&JUnit 安装目录&都加到系统环境变量 CLASSPATH 中去即 可。 执行套件可以像上述程序一样在 main 方法中使用, 也可以直接在 命令行调用:java junit.textui.TestRunner 测试类名(文本格式)、 java junit.awtui.TestRunner 测试类名(图形格式,AWT 版)、j ava junit.swingui.TestRunner 测试类名(图形版,Swing 版)。 编译执行(即在命令行执行 javac testQueue.java 和 javatest Queue), 你会发现屏幕上出现提示: .E 一个小点说明执行了一个测试用例,E 表示其失败 Time: 0.11 说明执行测试共花费了 0.11 秒 There was 1 error: 说明存在一个错误 1) testEmpty(testQueue)java.lang.NoClassDefFoundErro r: Queue at testQueue.setUp(testQueue.java:13) at testQueue.main(testQueue.java:9) FAILURES!!! Tests run: 1, Failures: 0, Errors: 1 测试没有通过是肯定的,因为 Queue 类都还没有写呢?怎么可能 通过测试,因此,我们就编写以下代码,以使测试通过: public class Queue extends java.util.Vector { public Queue() { super(); } public boolean empty() { return super.isEmpty(); } } 将这个类编译后,再次执行测试程序,这时将出以下提示: . 一个小点说明执行了一个测试用例,没有 E 表示其成功 Time: 0.11 OK (1 test) 你还可以使用前面我们说到的另两个命令, 使测试反馈以图形化的 形式体现出来,例如,执行 java junit.awtui.TestRunner testQue ue, 将出现:图1 第二次迭代 接下来, 我们修改测试程序, 加入测试案例 TC04、 TC05 的考虑。 import junit.framework.*; public class testQueue extends TestCase { protected Queue q1,q2; public static void main (String[] args) { junit.textui.TestRunner.run (suite()); } protected void setUp() { q1= new Queue(); q2= new Queue(); q2.inqueue(&first&); /对队列 q2 执行插入队列操作 q2.inqueue(&second&); } public static Test suite() { return new TestSuite(testQueue.class); } public void testEmpty() { assertTrue(q1.empty()); //当队列新建时,应为空-TC01 } public void testInqueue() { assertTrue(!(q2.empty())); //执行了插入队列操作,队列就应不为空-TC05 assertEquals(1,q2.search(&second&)); //search 方法用于确定元素在队列中的位置 //后插入的数据元素,应在未尾-TC04 //插入两个,第一个在位置 0, 第二在位置 1 } } 根据这个测试代码,我们需要在 Queue 类中添加上 inqueue() 和 search() 两个方法,如下所示: public class Queue extends java.util.Vector { public Queue() { super(); } public boolean empty() { return super.isEmpty(); } public synchronized void inqueue (Object x) { super.addElement(x); } public int search(Object x) { return super.indexOf(x); } } 编译之后, 再次执行 java junit.awtui.TestRunnertestQueue, 你将再次看到成功的绿色。图2 我们仔细看一下这一界面。 1) 最上面列出了测试代码的类名,右边有一个&Run& 按钮,当 你需要再次运行这一测试代码时,只需单击这个按钮。另外,将&Relo ad classesevery run& 选项打上勾很有用, 当你测试未通过 (出现红 色时), 你可以转身去修改代码,修改完后,只需再按&Run& 按钮就 可以再次运行。 2) 中间区域是一个状态汇报区,红色表示未通过,统计了共运行 了多少个测试(也就是在 TestCase 类中方法的数量)。 3) 如果测试时出现错误,例如,我们不小心将&assertTrue(!(q 2.empty()));& 误写成为&assertTrue(q2.empty());& 就将造成测 试失败: 注:由于第一个测试还是通过的,因此你会看到绿色条一闪。这时, 你将会发现 JUnit 会将错误列出来,并且对应的&Run&按钮也由灰变成 了亮,这表示你可以转身修改,完成后单击这个&Run 按钮&可以只做刚 才失效的这个测试,这将节省大量的时间。 同时,在最下面的窗体里,列出了失效的详细原因。
栈和队列的基本操作的实现 数据结构实验_计算机软件...存储结构; 理解栈和队列的相关基本运算; 编程对相关...的各种基本运算,并在此基础上设计一个主程序 完成...数据结构课设――队列程序_电脑基础知识_IT/计算机_专业资料。成绩评定表学生...数据在内存中链式存储,用一个 Creat()函数实现对链表的创建。 Creat()函数代码...线性结构和非线性结构 线性结构的特点:在结构中,所有数据成员都处于一个序列中,...第三章 线性表 1.栈和队列是在程序设计中被广泛使用的两种线性数据结构。从...17 第1页 共 29 页 摘要本文介绍了几种基本数据结构(例如线性表、队列)在信息学竞赛中的应用,并通过文 中的几道例题集中体现了这些数据结构的重要作用。全文...队列是一种常用的数据结构,有顺序和链式两种存储结构,在实际中应用十分 广泛,而...{ QueueP QueueP } LQ 七、源程序 #include &stdlib...数据结构 队列实验报告_学习总结_总结/汇报_实用文档。队列实验报告 真实完整 ...在本演示程序中,首先要链队列添加一个头结点,并判断队列是否为空,它只允许在...数据结构实验-栈和队列基本操作_计算机软件及应用_IT/计算机_专业资料。数据结构...将一个元素出队列 //显示队列中所有元素 五、程序代码 1、栈 #include &...实 验 报 告 课程名称 实验项目 数据结构程序设计 数据结构中栈和队列的应用 ...这次课程设计让我有一个深刻的体会,那就是细节决定成败,编程最需要的是严谨, ...种常见的数据结构,是两种非常重要的线性结构,也都是...它们广泛应用在各 种软件系统中。本题就是要用这些...源程序 1.用顺序栈和链式队列实现逆置和回文 1.用...《C语言程序设计与数据结构... 42页 1财富值 数据结构 栈和队列基本操作......(j=1;j&=10;j++) Push(&s,j); printf(&栈中元素依次为:&); Stack...
All rights reserved Powered by
www.tceic.com
copyright &copyright 。文档资料库内容来自网络,如有侵犯请联系客服。没有更多推荐了,
不良信息举报
举报内容:
数据结构(三)——队列及实现、循环队列实现
举报原因:
原文地址:
原因补充:
最多只允许输入30个字
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!每种数据结构都具有插入、删除和查找三种基本运算,这种说法对不对?请详细解答_百度知道
每种数据结构都具有插入、删除和查找三种基本运算,这种说法对不对?请详细解答
我有更好的答案
每种数据结构都具有插入、删除和查找三种基本运算,这种说法并不正确。一般而言,并不是所有的数据结构都有这三种基本运算。比如多维数组,就没有插入和删除,可以看看,哪怕是二维数组,如果删除其中某个元素,用行还是列来顶替,顶替后,二维数组不就出现缺口了。再比如说栈和队列,一般并不需要查找(其实原则上说也不能查找,因为逻辑上其访问点被严格限制在线性表的端点了,即使用顺序存储或者链式存储可以在存储结构中查找)数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。
采纳率:100%
其实楼上的粘贴的答案并不正确,一般而言,并不是所有的数据结构都有这三种基本运算比如多维数组,就没有插入和删除,可以看看,哪怕是二维数组,如果删除其中某个元素,用行还是列来顶替?顶替后,二维数组不就出现缺口了?!再比如说栈和队列,一般并不需要查找(其实原则上说也不能查找,因为逻辑上其访问点被严格限制在线性表的端点了,即使用顺序存储或者链式存储可以在存储结构中查找)
本回答被提问者和网友采纳
计算机解决一个具体问题时,大致需要经过下列几个步骤:首先要从具体问题中抽象出一个适当的数学模型,然后设计一个解此数学模型的算法,最后编出程序、进行测试、调整直至得到最终解答。寻求数学模型的实质是分析问题,从中提取操作的对象,并找出这些操作对象之间含有的关系,然后用数学的语言加以描述。计算机算法与数据的结构密切相关,算法无不依附于具体的数据结构,数据结构直接关系到算法的选择和效率。运算是由计算机来完成,这就要设计相应的插入、删除和修改的算法 。也就是说,数据结构还需要给出每种结构类型所定义的各种运算的算法。
为您推荐:
其他类似问题
数据结构的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。扫一扫体验手机阅读
数据结构学习笔记-排序/队/栈/链/堆/查找树/红黑树
<span type="1" blog_id="1930025" userid='
分享到朋友圈
关注作者,不错过每一篇精彩您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
数据结构课程设计实验报告-栈和队列的用.doc 18页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
&#xe600;下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
数据结构课程设计实验报告-栈和队列的用
你可能关注的文档:
··········
··········
数学与计算机学院
实 验 报 告
课程名称 数据结构
实验名称 实验1
栈和队列的用
实验时间 2010 年 4 月 26 日
指导单位 软件工程系
学院(系) 数学与计算机 专
业 软件工程
实验名称 栈和队列的应用 指导教师
实验类型 验证 实验学时 3 实验时间 16:00-17:40
实验目的和要求
栈的顺序存储结构和链式存储结构;
掌握栈的先进后出的原则;
掌握栈的基本运算;加深理解顺序栈和链栈的意义,理解用栈的插入和删除操作算法。
掌握队列的顺序存储结构和链式存储结构;
掌握队列的先进先出的原则;
掌握队列的基本运算;加深理解顺序循环队列和链队列的意义,理解用顺序循环队列和链队列的入队和出队等基本操作算法。
实验要求:(1)理解栈初始化、判断栈是否空、入栈、出栈等算法;(2)理解队列入队、出队等算法。
二、实验环境(实验设备)
微型计算机P4
Windows XP+Microsoft Visual C++6.0
三、实验原理及内容
1.请使用链栈实现通用数制转换程序:将任意一个十进制数转换成p进制的数。(p分别取2,8,16)
2. 假定一个单向循环链表来表示队列(即循环链队),该队列只设一个队尾指针rear,不设队首指针,试编写下列各种运算的算法:
向循环链队插入一个元素值为x的结点;
从循环链队中删除一个结点;
输出队列中所有元素;
实验前准备:
(1)请实现链栈的基本操作:初始化、进栈、出栈、输出。并要求上机验证通过。
(2)创建只有一个尾指针的单向循环队列的的结构体定义和初始化操作。
实验时完成1-2两题
实验后:考虑如果将2小题链队中的结点的数据类型改一个学生的通讯簿:姓名,手机号码、邮箱、QQ号。如何实现该题的相应算法 ,并要求上机验证通过。
实验解答:
1) 链栈中的结点是如何定义的?写出结构体描述。
typedef struct dnode
struct dnode *//指针域
//置于Sqstack前,因为后面的用到了Dnode
2)写出链栈的入栈算法
void push(Sqstack &S,Dnode *p,int e)
p=(Dnode *)malloc(sizeof(Dnode));//定义结点,分配空间
p-&data=e;
///链栈不存在空间不足
//链栈是用指针取数据,这是顺序栈的操作.指向下一个元素是通过-&next
p-&next=S.
S.top=p;//p始终指向最后结点
3)写出链栈的出栈算法?
pop(Sqstack &S)
while(S.top!=S.base)
if(S.top-&data&=10)//大于10进行字母转换
printf(&%c&,(char)(S.top-&data+55));
printf(&%d&,S.top-&data);
S.top=S.top-&
printf(&\n&);
4)写出利用链栈进行通用数制转换算法?在该算法中你是如何考虑进位制中数码转换和保存的?
void DtoP(Sqstack &S)
S.base=S.top=(Dnode *)malloc(sizeof(Dnode));
S.base-&next=0;
printf(&请输入十进制数:&);
scanf(&%d&,&n);
printf(&请输入要转化成的进制:&);
scanf(&%d&,&x);
{ Dnode *p=0;
p=(Dnode*)malloc(sizeof(Dnode));
//指向结点的指针
push(S,p,n%x);
//将余数进栈
正在加载中,请稍后...
13页57页22页17页11页13页35页20页20页20页}

我要回帖

更多关于 数据结构栈与队列 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信