顺序栈实验

顺序栈实验
顺序栈实验

实验三顺序栈

一、实验目的

1、掌握用VC工具上机调试顺序栈的基本方法;

2、掌握顺序栈的基本操作,顺序栈初始化、入栈、出栈、判断栈空、判断栈满以及

求栈长度操作;

3、掌握队列在顺序存储结构上的操作实现。

二、实验学时

2学时

三、实验类型

验证型

四、实验内容

1、顺序栈的初始化、入栈、出栈、判断栈空、判断栈满以及求栈长度操作的实现;

2、对栈通过静态顺序和动态顺序两种不同的顺序映像方式加以实现。

3、通过设计统一界面来调用基本操作的实现。

五、实验原理

1、顺序栈概述

栈是一种受限的线性表,由于规定了栈的入栈与出栈只能在一端进行,故而产生了后进先出,先进后出的结果,因而常应用于具有这种特性的问题中进行模拟,广泛使用于程序设计中。

顺序栈是栈的顺序映像的实现,可采用静态顺序存储结构和动态存储结构,在静态顺序存储时需分配一个预先设定大小的数组与栈顶指示器,规定若栈为空则栈顶指示器为-1,否则栈顶指示器指向当前栈顶元素,栈满则栈顶指示器为预先设定的值减1,入栈时需栈顶指示器加1,此时元素入栈即可,出栈时将当前栈顶指示器指向的元素返回,栈顶指示器减1即可。动态存储时需动态申请预先设定的空间交给栈底指针,对栈操作时栈底指针不动,栈顶指针移动,为方便操作可将栈的长度封装进来,动态实现的优点在于若空间不够时,可再申请一个增量的空间进行补充,但缺点是较静态而言稍复杂一些。

2、基本算法

(1)SeqStackInitiate(Q);初始化顺序栈S。

(2)SeqStackEmpty(Q);判断顺序栈S非空否操作。

(3)EnSeqStack (Q,x);顺序栈S入栈操作,在顺序栈S的栈顶插入数据元素x。

(4)DeSeqStack (Q,d);顺序栈S出栈操作,把顺序栈S的栈顶元素删除并由参数d 带回。

(5)LenSeqStack (Q);求顺序栈S长度。

(6)DisSeqStack (Q);输出顺序栈S。

3、模块层次

要求画出顺序栈的模块层次图。如图所示

图5 顺序栈模块层次图

4、关键算法NS 图

六、实验步骤及要求

用VC 语言编程实现建立一个顺序栈SeqStack ,并在此队列中入队若干个元素和出队若干个元素

1. 顺序栈S 初始化;

2. 通过键盘读取元素建立顺序栈S ;

3. 输出此顺序栈;

4. 求此时顺序栈长度;

5. 顺序栈S 入栈若干个元素;

6. 求此时顺序栈S 长度;

7. 判断此顺序栈S 是否为满;

8. 输出此顺序栈S ;

9. 顺序栈S 出栈若干个元素;

10.

判断此顺序栈

S 是否为空; 11.

求此时顺序栈S 长度; 12.

输出此循环队列; 13. 若是动态实现方式则释放空间;

14. 程序完成。

七、界面要求

1、界面统一。如下图所示:

图6 顺序栈统一界面图

2:界面可以不统一,按自己设计的形式。

八、思考问题

结合实验过程,回答下列问题:

1、何时采用循环队列处理问题为最佳选择。

九、实验报告要求

1、根据对队列这一受限的线性表的理解,如何实现循环队列;

2、实现循环队列的入队和出队操作的程序设计思路;

3、何时选用循环队列去解决实际问题;

4、采用循环队列解决问题的特点;

5、调试程序过程中遇到的问题及解决方案;

6、本次实验的结论与体会。

数据结构-实验报告顺序栈

(封面) 学生实验报告 学院:国际经贸学院 课程名称:数据结构 专业班级: 09电子商务 姓名: 学号: 学生实验报告

(经管类专业用) 一、实验目的及要求: 1、目的 通过实验,实现顺序栈的各种基本运算。 2、内容及要求 编写一个程序,实现顺序栈的各种基本运算,并在此基础上设计一个主程序完成下列功能: (1)初始化栈S。 (2)判断栈S是否非空。 (3)依次进栈元素a,b,c,d,e。 (4)判断栈S是否非空。 (5)输出栈的长度。 (6)输出从栈顶到栈底的元素。 (7)输出出栈序列; (8)判断链栈S是否为空; (9)释放链栈 二、仪器用具: 三、实验方法与步骤:

一、查阅顺序栈等相关资料,熟悉顺序栈基本概念和流程 二、“开展”顺序栈实验流程 三、整理实验数据和文档,总结实验的过程,编写实验报告 四、实验结果与数据处理: 1、顺序栈的代码: #include #include #define MaxSize 100 typedef char ElemT ype; typedef struct { ElemT ype data[MaxSize]; int top; //栈顶指针 } SqStack; void InitStack(SqStack *&s) { s=(SqStack *)malloc(sizeof(SqStack)); s->top=-1; } void ClearStack(SqStack *&s) { free(s); } int StackLength(SqStack *s) { return(s->top+1);

小学科学四年级下册实验操作步骤

四年级下册实验、活动、制作及仪器认识使用 实验 1(教材实验)(第 1 课) 实验名称:液体热胀冷缩实验 实验材料:玻璃小药瓶、插有细管的瓶塞、红(蓝)墨水、酱油或醋、热水、冷水、烧杯 实验过程: 1.把小药瓶中加满红墨水,盖上瓶塞放入热水中。发现液面上升。 2.再把小药瓶放入冷水中,发现液面下降。 3.用酱油或醋再重复以上实验。 实验结论:液体有热胀冷缩的性质。 注意事项:防止被热水烫伤 实验 2(拓展制作)(第 1 课) 制作名称:自制温度计 制作材料: 教参 16页 自制温度计 【制作材料】找一个盛过青霉素的小瓶,准备一支用完了的透明针管中性笔芯(含笔尖密封的塑料帽)和一杯茶水。 【制作方法】 1.把针管笔尖从橡皮瓶盖下部穿向上部(可用铁圆规脚先打一个小孔,但要确保笔芯与瓶 盖密合),套上密封塑料帽。 2.把茶水倒一些到小瓶内盛满,滴一滴红墨水或蓝墨水将水染色。 3.盖上插有笔芯的橡皮瓶盖,并盖紧,以保证密封性,注意不要弄湿桌面。自制温度计 就这样做成了。 4.然后,将小瓶先放入预制温度的热水里,后放入预制温度的冷水里,观察到的水柱变化 范围,划上相应刻度,根据两次温度差值均分标记范围的刻度,这样一个简单测量温度的温度 计就制作成功了。 实验 3(教材实验)(第 2 课) 实验名称:气体热胀冷缩实验 【实验材料】锥形瓶、大烧杯、小气球、开水、冷水 【实验操作】 1.把小气球的口套在锥形瓶口并用细线扎紧。 2.把锥形瓶放入烧杯后,向烧杯内倒开水。观察气球有什么变化。 3.把锥形瓶从烧杯中取出,放入装冷水的烧杯,观察气球有什么变化。 【实验现象】原来垂下的气球慢慢胀大竖立起来。把锥形瓶从烧杯中取出后,放入装冷水的烧杯,气球又迅速变小。 【实验结论】气体有热胀冷缩的性质。 [ 注意事项 ] 1.气球准备用过的。 2.锥形瓶与气球的连接处不能漏气。为使现象明显,可预先向瓶内吹一些气。

数据结构堆栈与队列实验报告

实验二堆栈和队列 实验目的: 1.熟悉栈这种特殊线性结构的特性; 2.熟练并掌握栈在顺序存储结构和链表存储结构下的基本运算; 3.熟悉队列这种特殊线性结构的特性; 3.熟练掌握队列在链表存储结构下的基本运算。 实验原理: 堆栈顺序存储结构下的基本算法; 堆栈链式存储结构下的基本算法; 队列顺序存储结构下的基本算法; 队列链式存储结构下的基本算法; 实验内容: 第一题链式堆栈设计。要求 (1)用链式堆栈设计实现堆栈,堆栈的操作集合要求包括:初始化StackInitiate(S),非空否StackNotEmpty(S),入栈StackiPush(S,x),出栈StackPop(S,d),取栈顶数据元素StackTop(S,d); (2)设计一个主函数对链式堆栈进行测试。测试方法为:依次把数据元素1,2,3,4,5入栈,然后出栈并在屏幕上显示出栈的数据元素; (3)定义数据元素的数据类型为如下形式的结构体, Typedef struct { char taskName[10]; int taskNo; }DataType; 首先设计一个包含5个数据元素的测试数据,然后设计一个主函数对链式堆栈进行测试,测试方法为:依次吧5个数据元素入栈,然后出栈并在屏幕上显示出栈的数据元素。 第二题对顺序循环队列,常规的设计方法是使用対尾指针和对头指针,对尾指针用于指示当前的対尾位置下标,对头指针用于指示当前的対头位置下标。现要求: (1)设计一个使用对头指针和计数器的顺序循环队列抽象数据类型,其中操作包括:初始化,入队列,出队列,取对头元素和判断队列是否为空; (2)编写主函数进行测试。 程序代码: 第一题: (1)源程序"LinStack.h"如下: #define NULL 0 typedef struct snode { DataType data; struct snode *next; } LSNode; /*(1)初始化StackInitiate(LSNode ** head) */ void StackInitiate(LSNode ** head) /*初始化带头结点链式堆栈*/

顺序栈的基本操作讲解

遼穿紳範大學上机实验报告 学院:计算机与信息技术学院 专 业 : 计算机科学与技术(师 范) 课程名称:数据结构 实验题目:顺序栈的基本操作 班级序号:师范1班 学号:201421012731 学生姓名:邓雪 指导教师:杨红颖 完成时间:2015年12月25号 一、实验目的: 1 ?熟悉掌握栈的定义、结构及性质; 2. 能够实现创建一个顺序栈,熟练实现入栈、出栈等栈的基本操作; 3?了解和掌握栈的应用。 二、实验环境: Microsoft Visual C++ 6.0

三、实验内容及要求: 栈是一种特殊的线性表,逻辑结构和线性表相同,只是其运算规则有更多的限制,故又称为受限的线性表。 建立顺序栈,实现如下功能: 1. 建立一个顺序栈 2. 输出栈 3. 进栈 4. 退栈 5. 取栈顶元素 6. 清空栈 7. 判断栈是否为空 进行栈的基本操作时要注意栈”后进先出”的特性。 四、概要设计: 1、通过循环,由键盘输入一串数据。创建并初始化一个顺序栈。 2、编写实现相关功能函数,完成子函数模块如下。 3、调用子函数,实现菜单调用功能,完成顺序表的相关操作

五、代码: #include #include #define maxsize 64 typedef int datatype; //定义结构体typedef struct { datatype data[maxsize]; int top; }seqstack; //建立顺序栈seqstack *SET(seqstack *s) { int i; s=(seqstack*)malloc(sizeof(seqstack)); s->top=-1; printf(" 请输入顺序栈元素(整型,以scanf("%d",&i); do{ s->top++; s->data[s->top]=i; scanf("%d",&i); 0 结束):"); }while(i!=0); printf(" 顺序栈建立成功\n"); return s; } //清空栈void SETNULL(seqstack *s) { s->top=-1;} //判断栈空 int EMPTY(seqstack *s) { if(s->top>=0) return 0; else return 1;} //进栈 seqstack *PUSH(seqstack *s) { int x; printf(" 你想要插入的数字:"); scanf("%d",&x); if(s->top==maxsize-1) { printf("overflow"); return NULL; } else {

实验报告一顺序表的操作

《数据结构》实验报告一 系别:班级: 学号:姓名: 日期:指导教师: 一、上机实验的问题和要求: 顺序表的查找、插入与删除。设计算法,实现线性结构上的顺序表的产生以及元素的查找、插入与删除。具体实现要求: 从键盘输入10个整数,产生顺序表,并输入结点值。 从键盘输入1个整数,在顺序表中查找该结点的位置。若找到,输出结点的位置;若找不到,则显示“找不到”。 从键盘输入2个整数,一个表示欲插入的位置i,另一个表示欲插入的数值x,将x插入在对应位置上,输出顺序表所有结点值,观察输出结果。 从键盘输入1个整数,表示欲删除结点的位置,输出顺序表所有结点值,观察输出结果。二、程序设计的基本思想,原理和算法描述: (包括程序的结构,数据结构,输入/输出设计,符号名说明等) 三、源程序及注释:

#include <> /*顺序表的定义:*/ #define ListSize 100 /*表空间大小可根据实际需要而定,这里假设为100*/ typedef int DataType; /*DataType可以是任何相应的数据类型如int, float或char*/ typedef struct { DataType data[ListSize]; /*向量data用于存放表结点*/ int length; /*当前的表长度*/ }SeqList; /*子函数的声明*/ void CreateList(SeqList * L,int n); /*创建顺序表函数*/ int LocateList(SeqList L,DataType x); /*查找顺序表*/ void InsertList(SeqList * L,DataType x,int i); /*在顺序表中插入结点x*/ void DeleteList(SeqList * L,int i);/*在顺序表中删除第i个结点*/ void PrintList(SeqList L,int n); /*打印顺序表中前n个结点*/ void main() { SeqList L; int n=10,x,i; /*欲建立的顺序表长度*/ =0;

栈的操作(实验报告)

实验三栈和队列 3.1实验目的: (1)熟悉栈的特点(先进后出)及栈的基本操作,如入栈、出栈等,掌握栈的基本操作在栈的顺序存储结构和链式存储结构上的实现; (2)熟悉队列的特点(先进先出)及队列的基本操作,如入队、出队等,掌握队列的基本操作在队列的顺序存储结构和链式存储结构上的实现。 3.2实验要求: (1)复习课本中有关栈和队列的知识; (2)用C语言完成算法和程序设计并上机调试通过; (3)撰写实验报告,给出算法思路或流程图和具体实现(源程序)、算法分析结果(包括时间复杂度、空间复杂度以及算法优化设想)、输入数据及程序运行结果(必要时给出多种可能的输入数据和运行结果)。 3.3基础实验 [实验1] 栈的顺序表示和实现 实验内容与要求: 编写一个程序实现顺序栈的各种基本运算,并在此基础上设计一个主程序,完成如下功能:(1)初始化顺序栈 (2)插入元素 (3)删除栈顶元素 (4)取栈顶元素 (5)遍历顺序栈 (6)置空顺序栈 分析: 栈的顺序存储结构简称为顺序栈,它是运算受限的顺序表。 对于顺序栈,入栈时,首先判断栈是否为满,栈满的条件为:p->top= =MAXNUM-1,栈满时,不能入栈; 否则出现空间溢出,引起错误,这种现象称为上溢。 出栈和读栈顶元素操作,先判栈是否为空,为空时不能操作,否则产生错误。通常栈空作为一种控制转移的条件。 注意: (1)顺序栈中元素用向量存放 (2)栈底位置是固定不变的,可设置在向量两端的任意一个端点 (3)栈顶位置是随着进栈和退栈操作而变化的,用一个整型量top(通常称top为栈顶指针)来指示当前栈顶位置 参考程序: #include #include #define MAXNUM 20

实验操作重要步骤

一、RVDS破解步骤 1.运行“D:\setupfile\RVDS安装\Crack”目录下的keygen程序: 2.单击上面对话左下角的【Generate】按钮 3.把”D:\setupfile\RVDS安装\Crack”目录下的license文件拷贝覆盖到”D:\Program Files\ARM\Licenses”目录 4.破解RVDS完成,运行“D:\我的文档\桌面\微机原理实验”目录下的“CodeWarrior for RVDS”程序即可。 5.如果debugger提示已经运行,则在任务管理器中杀掉 rvdebug.exe和tvs.exe后重新开始调试。 二、RVDS使用重要步骤(使用实验箱) 1.运行“D:\我的文档\桌面\微机原理实验”目录下的“H-JTAG”程序;

2.单击工具栏上第二个按钮,如果上面的界面显示“ARM920T”则计算机已经和实验箱正确连接,只有看到“ARM920T”才能继续后续步骤; 3.确认你正在使用的项目管理对话框的项目调试类型为“Debug”,不是“Release”,如下图所示: 4.在CodeWarror中选择倒数第二个按钮,弹出项目编译链接设置对话框,分别选择“Language Settings”下的“RealView Assembler”和”RealView Compiler,分别“修改“Target”页面下的“Architecture or Processor”为“ARM920T” 5.在“Linker”下的“Realview Linker”设置如下:

6.选择“Debugger”下的“Realview Debuger”,”Choose a Debugger”设置如下(选择“RVD (Realview Debugger)”): 6.选择CodeWarror工具栏从右向左第五个按钮,弹出“RVDEBUG”调试器。如果提示调试已经运行,则在任务管理器中关闭“rvdebug.exe”和“tvs.exe”后重新开始调试。 7.在下面RVDS调试器中单击选择工具栏上的按钮

数据结构栈的基本操作,进栈,出栈

第五次实验报告—— 顺序栈、链栈的插入和删除一需求分析 1、在演示程序中,出现的元素以数字出现定义为int型, 2、演示程序在计算机终端上,用户在键盘上输入演示程序中规定的运算命令,相应的输入数据和运算结果显示在终端上 3、顺序栈的程序执行的命令包括如下: (1)定义结构体 (2)顺序栈的初始化及创建 (3)元素的插入 (4)元素的删除 (5)顺序栈的打印结果 3、链栈的程序执行的命令包括如下: (1)定义结构体 (2)链栈的初始化及创建 (3)元素的插入 (4)元素的删除 (5)链栈的打印结果 二概要设计 1、顺序栈可能需要用到有序表的抽象数据类型定义: ADT List{ 数据对象:D={ai|ai∈ElemL, i=1,2,...,n, n≥0} 数据关系:R1={|ai-1,ai ∈D, i=2,...,n } 基本操作: InitStack(SqStack &S) 操作结果:构造一个空栈 Push(L,e) 操作结果:插入元素e为新的栈顶元素

Status Pop(SqStack &S) 操作结果:删除栈顶元素 }ADT List; 2、链栈可能需要用到有序表的抽象数据类型定义: ADT List{ 数据对象:D={ai|ai∈ElemL, i=1,2,...,n, n≥0} 数据关系:R1={|ai-1,ai ∈D, i=2,...,n } 基本操作: LinkStack(SqStack &S) 操作结果:构造一个空栈 Status Push(L,e) 操作结果:插入元素e为新的栈顶元素 Status Pop(SqStack &S) 操作结果:删除栈顶元素 }ADT List; 3、顺序栈程序包含的主要模块: (1) 已给定的函数库: (2)顺序栈结构体: (3)顺序栈初始化及创建: (4)元素插入 (5)元素删除

qPCR实验操作流程

Q-PCR实验流程 ①实验前准备,每天早上到实验室后,先把超净工作台的紫外灯打开15-20分钟。 ②超净台前做实验,需佩戴干净的橡胶手套/一次性薄膜手套,RNA抽提需带口罩。③取EP管/枪头时需用镊子,不可以用使用过的手套直接取用。取完EP管/枪头后,袋子及时封好。④橡胶手套须放入超净台照射紫外,实验操作过程中不得带出超净台,移液器在一天工作结束后调至最大量程,并用75%乙醇清洁移液器,枪头盒及超净台面。⑤实验进行的过程中或观看实验时,没有带口罩不要在超净台前讲话。 总RNA抽提 1)细胞培养皿中细胞样品用1*PBS洗两次后,用1ml枪将PBS吸干净,加入1ml Trizol (Invitrogen)溶液,吹打混匀,并吸至RNase free EP管中使细胞充分裂解,室温静置5min; 组织样品用液氮充分研磨,加入1ml Trizol (Invitrogen)溶液,混匀,室温放置5min使其充分裂解;(管盖与管壁都需标记样品名称) 加入200μl氯仿,剧烈振荡混匀30s,使水相和有机相充分接触,室温静置3-5min;(离心时离心管按顺序排放,离心完毕,离心管的顺序也按顺序排好,与第一步的顺序一致) 3)4℃下,14,000g离心15min,可见分为三层,RNA在上层水相,移至另一个新的RNase free EP管;(用20-200ul的枪吸取上清,吸上清时,枪头应沿着液面上层吸取上清,枪头不可碰到、吸到中间层) 沉淀RNA:加入等体积异丙醇,轻柔地充分混匀(颠倒6-8次)(不应用振荡器混匀),室温静置10min; 4℃下,14,000g离心10min,收集RNA沉淀(如离心后仍不见EP管底部有沉淀,应将EP管放置在-80度冰箱过夜,继续在4℃下,14,000g离心10min,收集RNA 沉淀),去上清; 用75%乙醇洗涤两次(12,000g离心5min)(加入乙醇后只需轻轻颠倒EP管即可,不用振荡器震荡或枪头吸打沉淀),超净台风干;沉淀不能过干或过湿,过干则不易溶解,过湿则乙醇残留。 视沉淀量加入适量DEPC水(至少15ul)溶解沉淀。 三、去基因组 使用RNase-free的DNase ?(Promega),按以下体系配置反应液,37℃消化30min,65℃灭活10min。 RNA DNase ? 10 x buffer H2O(RNase free) RNasin 30 20 10 μl μl μl μl μl 总体积100μl 然后按以下步骤操作: 1) 加入等体积的苯酚/氯仿,上下颠倒混匀,室温放置5min,后14,000rpm,离心15min,取上清。

栈和队列综合实验报告

栈和队列综合实验报告 一、实验目的 (1)能够利用栈和队列的基本运算进行相关操作。 (2)进一步熟悉文件的应用 (3)加深队列和栈的数据结构理解,逐步培养解决实际问题的编程能力。 二、实验环境 装有Visual C++的计算机。 本次实验共计4学时。 三、实验内容 以下两个实验任选一个。 1、迷宫求解 设计一个迷宫求解程序,要求如下: 以M × N表示长方阵表示迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。 能任意设定的迷宫 (选作)如果有通路,列出所有通路 提示: 以一个二维数组来表示迷宫,0和1分别表示迷宫中的通路和障碍,如下图迷宫数据为:11

01 01 01 01 01 01 01 11 入口位置:1 1 出口位置:8 8 四、重要数据结构 typedef struct{ int j[100]; int top;栈顶指针,一直指向栈顶 }stack;//存放路径的栈 int s[4][2]={{0,0},{0,0},{0,0},{0,0}}; //用于存放最近的四步路径坐标的数组,是即使改变的,即走一步,便将之前的坐标向前移一步,将最早的一步坐标覆盖掉,新的一步放入数组末尾其实功能和队列一样。 其作用是用来判断是否产生了由于本程序算法产生的“田”字方格内的死循环而准备的,用于帮助跳出循环。 五、实现思路分析 if(a[m][n+1]==0&&k!=3){ n++; k=1; o=0; }else if(a[m+1][n]==0&&k!=4){ m++;

k=2; o=0; }else if(a[m][n-1]==0&&k!=1){ n--; k=3; o=0; }else if(a[m-1][n]==0&&k!=2){ m--; k=4; o=0; }else{ o++;} if(o>=2){ k=0; }//向所在方格的四个方向探路,探路顺序为→↓←↑(顺时针),其中if判断条件内的&&k!=n和每个语句块中的对k赋值是为防止其走回头路进入死循环,而最后一个else{}内语句是为了防止进入死路时,不能走回头路而造成的死循环。 push(q,m,n);//没进行一次循环都会讲前进的路径入栈。 if (pushf(&s[0][0],m,n)==0){ k=3;}//用来判断是否产生了由于本程序探路算法产生的“田”字方格内的死循环而准备的,用于帮助跳出田字循环。同时会将路径存入用于下次判断 六、程序调试问题分析 最开始写完时是没有死路回头机制的,然后添加了两步内寻路不回头机制。 第二个是“田”字循环问题,解决方法是加入了一个记录最近四步用的数组和一个判断田字循环的函数pushf。

数据结构- 顺序表的基本操作的实现-课程设计-实验报告

顺序表的基本操作的实现 一、实验目的 1、掌握使用VC++上机调试顺序表的基本方法; 2、掌握顺序表的基本操作:建立、插入、删除等运算。 二、实验仪器 安装VC++软件的计算机。 三、实验原理 利用线性表的特性以及顺序存储结构特点对线性表进行相关的基本操作四、实验内容 程序中演示了顺序表的创建、插入和删除。 程序如下: #include #include /*顺序表的定义:*/ #define ListSize 100 typedef struct { int data[ListSize]; /*向量data用于存放表结点*/ i nt length; /*当前的表长度*/ }SeqList; void main() { void CreateList(SeqList *L,int n); v oid PrintList(SeqList *L,int n); i nt LocateList(SeqList *L,int x); v oid InsertList(SeqList *L,int x,int i); v oid DeleteList(SeqList *L,int i); SeqList L;

i nt i,x; i nt n=10; L.length=0; c lrscr(); C reateList(&L,n); /*建立顺序表*/ P rintList(&L,n); /*打印建立后的顺序表*/ p rintf("INPUT THE RESEARCH ELEMENT"); s canf("%d",&x); i=LocateList(&L,x); p rintf("the research position is %d\n",i); /*顺序表查找*/ p rintf("input the position of insert:\n"); s canf("%d",&i); p rintf("input the value of insert\n"); s canf("%d",&x); I nsertList(&L,x,i); /*顺序表插入*/ P rintList(&L,n); /*打印插入后的顺序表*/ p rintf("input the position of delete\n"); s canf("%d",&i); D eleteList(&L,i); /*顺序表删除*/ P rintList(&L,n); /*打印删除后的顺序表*/ g etchar(); } /*顺序表的建立:*/ void CreateList(SeqList *L,int n) {int i; printf("please input n numbers\n"); for(i=1;i<=n;i++) scanf("%d",&L->data[i]); L->length=n;

数据结构实验报告 顺序栈

《数据结构与算法》实验报告

一、实验内容 1.栈的实现 2.顺序栈的基本操作 二、实验目的及要求 熟悉栈的基本操作在顺序栈的实现。通过具体应用实例在复习高级编程语言使用方法的基础上初步了解数据结构的应用。 三、设计分析与算法描述 顺序栈的存储结构: typedef struct { int elem[Stack_Size]; int top; }SeqStack; void InitStack(SeqStack *S)//构造一个空栈(初始化) int Push(SeqStack *S,int x)//进栈 int Pop(SeqStack *S,int *x)//出栈 int IsEmpty(SeqStack *S)//判栈是否空 int IsFull(SeqStack *S)//判栈是否满 int GetTop(SeqStack *S,int *x)//读栈顶 四、附件:带注释的源程序 #include"iostream.h" #define Stack_Size 50 #define false 0 #define true 1

typedef struct { int elem[Stack_Size]; int top; }SeqStack; void InitStack(SeqStack *S)//构造一个空栈(初始化) { S->top=-1; } int Push(SeqStack *S,int x)//进栈 { if(S->top==Stack_Size-1)//栈已满 return (false); S->top++; S->elem[S->top]=x; return (true); } int Pop(SeqStack *S,int *x)//出栈 { if(S->top==-1)//栈已空 return (false); else { *x=S->elem[S->top];

实验操作步骤

实验操作步骤 实验名称:菌种复苏(分3步完成,用时3天) 第一天: 1、紫外线照射超净台30分钟,进行准备工作(MH肉汤,EP管,5ml及200μl 枪头) 2、擦拭超净台,点酒精灯,擦手,擦枪,放EP管 3、向EP管中加入5ml肉汤(注意做空白对照) 4、向EP管中加入30μl菌液 5、做好标记,培养箱过夜培养 实验结果标准 实验组肉汤混浊,对照组肉汤清亮,证明无污染 第二天: 实验方法 1、准备:麦康凯培养基(需提前灭好麦康凯琼脂,倒入培养皿,冷却即为 麦康凯培养基),接种环,菌液(至少生长18h)等。紫外线照射超净台30分钟 2、擦拭超净台,点酒精灯,擦手,接种环用酒精灯火焰高温消毒 3、振荡菌液使其混合均匀,将接种环伸入菌液取一环菌液,在培养基中划 线 4、划完做标记,培养箱中培养过夜 划线方法:划三区,每划一次换一个接种环。第一区占1/3最密,第二区占1/2稍稀疏,第三区最稀疏,只与二区接触,不与一区接触。

实验结果标准:麦康凯平板上大肠杆菌光滑湿润,稍有隆起,边缘整齐,呈红色。部分呈线状连在一起,有单菌落。 第三天 实验名称:挑菌 实验方法 1、准备:EP管(10ml),枪头(5ml,10μl),移液枪,酒精灯等 2、紫外线照射超净台30分钟,擦拭超净台,点酒精灯,擦手,擦枪,放EP管 3、取5ml肉汤于EP管中(拆开肉汤,烧一圈瓶口再取肉汤;包括实验组和空白对照) 4、使用10μl枪头挑取单菌落后打入EP管中(对照组中只打入干净10μl枪头) 5、盖盖标记,培养箱过夜培养。 实验结果标准 实验组肉汤混浊,对照组肉汤清亮,证明无污染 实验名称:菌液稀释 实验方法 1、准备三个EP管(1.5ml),枪头(200μl,1ml),移液枪,酒精灯,MH肉汤等 2、向每个EP管中加入900μl肉汤 3、从原始菌液(通过肉眼观察浑浊度判断假定浓度为108)中取100μl加入EP 管,涡旋仪涡旋混匀,再从该EP管中取100μl加入EP管,涡旋混匀。依次操作。此时菌液被稀释到105。 4、留下最后一个EP管,涡旋仪涡旋混匀,从该EP管中取100μl加入含药平板。

栈溢出实验报告

华中科技大学计算机学院《信息系统应用安全》实验报告 实验名称团队成员: 注:团队成员贡献百分比之和为1 教师评语: 一.实验环境 ? 操作系统:windows xp sp3 ? 编译平台:visual c++ 6.0 ? 调试环境:ollydbg 二.实验目的 1. 掌握缓冲区溢出的原理; 2. 掌握缓冲区溢出漏洞的利用技巧; 3. 理解缓冲区溢出漏洞的防范措施。 三.实验内容及步骤 1. 缓冲区溢出漏洞产生的的基本原理和攻击方法 ? 缓冲区溢出模拟程序 由于拷贝字符串时产生缓冲区溢出,用“abcd”字符串的值覆盖了原来eip的值,所以 main函数返回时eip指向44434241,引发访问异常。 ? 运行命令窗口的shellcode 由于把main函数的返回eip地址替换成了jmp esp的地址,main函数 返回的时候就会执行我们的shellcode代码。该shellcode,运行命令窗口。 2. ms06-040 缓冲区溢出漏洞分析和利用 ? 溢出点定位 篇二:缓冲区溢出实验报告 缓 冲 区 溢 出 报 告 院系:计算机与通信工程学院 班级:信息安全10-02班 1. 实验目的 掌握缓冲区溢出的原理 掌握常用的缓冲区溢出方法 理解缓冲区溢出的危害性 掌握防范和避免缓冲区溢出攻击的方法 2. 实验工具 溢出对象:ccproxy 7.2 (1) (2)调试工具: 使用vmware虚拟机,安装ccproxy7.2进行实验调试。 3. 实验步骤 了解ccproxy 7.2 代理服务器为大家解决了很多问题,比如阻挡黑客攻击和局域网共享上网等。 ? 国内非 常受欢迎的一款代理服务器软件 ? 设置简单,使用方便 关于ccproxy6.2缓冲区溢出漏洞说明

顺序表实验报告

嘉应学院计算机学院 实验报告 课程名称数据结构实验名称线性表实验地点锡科405 指导老师巫喜红实验时间第2-3周提交时间第3周 班级1303班姓名魏振辉学号131110108 一、实验目的和要求 编写一个程序algo2-1.cpp,实现顺序表的各种基本运算 二、实验环境、内容和方法 实验内容: 1.初始化线性表L; 2.依次采用尾插法插入a,b,c,d,e元素; 3.输出顺序表L; 4.输出顺序表L的长度; 5.判断顺序表L是否为空; 6.输出顺序表L的第3个元素; 7.输出元素a的位置; 8.在第4个元素位置上插入f元素; 9.输出顺序表L; 10.删除L的第3个元素; 11.输出顺序表L; 12.释放顺序表L。 实验环境:Windows xp Visual C++6.0 三、实验过程描述 (详见本文件夹) 四、结果分析 运行结果如下图所示: 初始化线性表,先定义一个变量num,用while循环配合switch语句的使用来达到在未选择退出即num不等

时一直提示操作的效果,每执行一次操都会先运行fflush(stdin)函数来清除缓存区,避免下次操作受到干扰; 1、往线性表里插入元素,位置和元素用空格隔开; 2、查询线性表是否为空 3、输出顺序表 4、查询线性表长度

5、查询某位置的元素。执行查询操作时先用if语句判断查询元素的函数LocateElem(L,e)返回的值来执行不的操作,当返回的值为0时则所查元素不在线性表中; 6、查询木元素的位置。用if语句判断是否正确输入; 7、删除某元素。 8、释放顺序表 9、退出。用if语句每次执行操作时都判断一次指令是否正确。 五、实验总结

栈和队列及其应用实验报告

数据结构实验报告 实验名称:栈和队列及其应用 班级:12级电气本2 学号:2012081227 姓名:赵雪磊 指导教师:梁海丽 日期:2013年9月23日 数学与信息技术学院 一、实验目的

1. 掌握栈和队列的概念。 2.掌握栈和队列的基本操作(插入、删除、取栈顶元素、出队、入队等)。 3.理解栈和队列的顺序、链式存储。 二、实验要求 利用顺序栈将任意一个给定的十进制数转换成二进制、八进制、十六进制数并输出。 三、算法描述 #include "stdafx.h" #include "iomanip.h" void D10to2_8_16(int i,char radix) { char m; if(i>=radix) D10to2_8_16(i/radix,radix); if((m=i%radix+'0')>0x39) m+=7; cout << m; } void main(void) { int nDec; cout << "请输入一个十进制正整数...\n" << "nDec="; cin >> nDec; cout << "转换为二进制是:"; D10to2_8_16(nDec,2); cout << endl; cout << "转换为八进制是:0"; D10to2_8_16(nDec,8); cout << endl; cout << "转换为十六进制是:0x"; D10to2_8_16(nDec,16); cout << endl; } 四、程序清单 #include #include #define N 2 //可以控制进制转换 using namespace std; typedef struct{ int *top; int *base; int stacksize; }stack;

(完整word版)顺序栈基本操作实验报告

数据结构实验三 课程数据结构实验名称顺序栈基本操作第页 专业班级学号 姓名 实验日期:年月日评分 一、实验目的 1.熟悉并能实现栈的定义和基本操作。 2.了解和掌握栈的应用。 二、实验要求 1.进行栈的基本操作时要注意栈"后进先出"的特性。 2.编写完整程序完成下面的实验内容并上机运行。 3.整理并上交实验报告。 三、实验内容 1.编写程序任意输入栈长度和栈中的元素值,构造一个顺序栈,对其进行清空、销毁、入栈、出栈以及取栈顶元素操作。 2.编写程序实现表达式求值,即验证某算术表达式的正确性,若正确,则计算该算术表达式的值。 主要功能描述如下: (1)从键盘上输入表达式。 (2)分析该表达式是否合法: ?a) 是数字,则判断该数字的合法性。若合法,则压入数据到堆栈中。 ?b) 是规定的运算符,则根据规则进行处理。在处理过程中,将计算该表达式的值。 ?c) 若是其它字符,则返回错误信息。 (3)若上述处理过程中没有发现错误,则认为该表达式合法,并打印处理结果。 程序中应主要包含下面几个功能函数: ?l void initstack():初始化堆栈 ?l int Make_str():语法检查并计算

?l int push_operate(int operate):将操作码压入堆栈 ?l int push_num(double num):将操作数压入堆栈 ?l int procede(int operate):处理操作码 ?l int change_opnd(int operate):将字符型操作码转换成优先级 ?l int push_opnd(int operate):将操作码压入堆栈 ?l int pop_opnd():将操作码弹出堆栈 ?l int caculate(int cur_opnd):简单计算+,-,*,/ ?l double pop_num():弹出操作数 四、实验步骤 (描述实验步骤及中间的结果或现象。在实验中做了什么事情,怎么做的,发生的现象和中间结果) 第一题: #include using namespace std; #define STACK_INIT_SIZE 100 //存储空间初始分配量 #define STACKINCREMENT 10 //存储空间分配增量 #define OVERFLOW -1 #define OK 1 #define NO -1 #define NULL 0 typedef int Status; typedef char SElemType; typedef struct { SElemType *base; //在栈构造之前和销毁之后,base的值为NULL SElemType *top; //栈顶指针 int stacksize; //当前已分配的存储空间,以元素为单位 } SqStack; Status Initstack(SqStack &S)//构造一个空栈S { S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType)); if(!S.base) exit(OVERFLOW); S.top=S.base; S.stacksize= STACK_INIT_SIZE; return OK; }//InitStack Status StackEmpty(SqStack &S) { if(S.base==S.top)

Crystal Ball实验操作过程

Crystal Ball实验操作过程 实验一: 一、数据录入与导入 双击CB快捷方式图标或直接打开Excel打开软件。前面提到过Crystal Ball软件是在Excel 里的一个插件,所以双击打开后是Excel的界面,如下图: 图 1 用户可以在该界面中直接录入数据,也可以左击右上角的符号,选择打开,将原有Excel表格中的数据直接导入到带有Crystal Ball插件的电子表格中。 二、拟合分布 图2 (1)对数据进行标准化处理(减少原数据相互间的距离对拟合分布的影响) 通过Average计算每个分布工程样本数据的均值,然后各个样本数据除以相

应的均值,对数据进行标准化处理。 (2)拟合分布 选取表格区域,点击工具栏上“Run-Tools-Batch Fit”,如图3所示。 图3 在操作对话框中,选择“next”,至图4对话框对相应命令进行选择,可得到拟合过程的相关数据。 图4 注:对于卡方检验,水晶球软件计算p值,p值大于0.5一般表示紧密拟合; 对于科尔莫格洛夫-斯米尔诺夫检验,一般地,小于0.03的K-S值表明良好拟合; 对于安德森-达林检验,小于1.5的计算值一般表明拟合优良。 实验二:

一.按照实验一的操作,先将数据在Crystal Ball软件打开. 二、假设单元格概率分布的定义及相关操作 输入数据后,进行随机变量假设单元格概率分布的定义。这里假设使用悲观时间的单元格来进行概率分布的定义。(注:对于假设单元格的选择,并无太多的限制,因为定义各种概率的分布,是由相应的参数确定的,因此选择的假设单元格不同对结果并没有影响。)有一点需要注意的是,选择假设单元格时,该单元格应当是一确定的数字,而不能是公式. 选定单元格(如单元格I2)后,点击工具栏上的,随即弹出图5,CB 软件中提供22种不同的分布可供选择,根据实验任务书的要求,第一和第二项分部分项工程服从三参数beta分布,因此,选择BtaPERT分布,并填入相应参数,即可完成对“基坑支护挖土方”的定义,如图6所示。同理可完成其它分布的定义。 图5 图6 由于第3~8项同为三角分布,因此当完成第3项的定以后,选定I4单元格

数据结构栈和队列实验报告.doc

南京信息工程大学实验(实习)报告 实验(实习)名称栈和队列日期2017.11.8 得分指导老师崔萌萌 系计算机系专业软件工程年级2016 班次(1) 姓名学号 一、实验目的 1、学习栈的顺序存储和实现,会进行栈的基本操作 2、掌握递归 3、学习队列的顺序存储、链式存储,会进行队列的基本操作 4、掌握循环队列的表示和基本操作 二、实验内容 1、用栈解决以下问题: (1)对于输入的任意一个非负十进制数,显示输出与其等值的八进制数,写出程序。(2)表达式求值,写出程序。 2、用递归写出以下程序: (1)求n!。 (2)汉诺塔程序,并截图显示3、4、5个盘子的移动步骤,写出移动6个盘子的移动次数。

3、编程实现:(1)创建队列,将asdfghjkl依次入队。(2)将队列asdfghjkl依次出队。 4、编程实现创建一个最多6个元素的循环队列、将ABCDEF依次入队,判断循环队列是否队满。 三、实验步骤 1.栈的使用 1.1 用栈实现进制的转换: 代码如下: #include #include using namespace std; int main() { stack s; //栈s; int n,radix; printf("请输入要转换的十进制非负整数: "); scanf("%d",&n); printf("请输入目标进制: "); scanf("%d",&radix);

printf("转换为%d进制: ",radix); while(n) { s.push(n%radix); n /= radix; } while(!s.empty()) { //非空 printf("%d",s.top()); s.pop(); } printf("\n"); return 0; } 运行结果如下: 2.2 求表达式的值 代码如下: #include #include #include #include #define true 1 #define false 0 #define OPSETSIZE 8 typedef int Status;

顺序表的查找、插入与删除实验报告

《数据结构》实验报告一 学院:班级: 学号:姓名: 日期:程序名 一、上机实验的问题和要求: 顺序表的查找、插入与删除。设计算法,实现线性结构上的顺序表的产生以及元素的查找、插入与删除。具体实现要求: 1.从键盘输入10个整数,产生顺序表,并输入结点值。 2.从键盘输入1个整数,在顺序表中查找该结点的位置。若找到,输出结点的位置;若找 不到,则显示“找不到”。 3.从键盘输入2个整数,一个表示欲插入的位置i,另一个表示欲插入的数值x,将x插 入在对应位置上,输出顺序表所有结点值,观察输出结果。 4.从键盘输入1个整数,表示欲删除结点的位置,输出顺序表所有结点值,观察输出结果。 二、源程序及注释: #include #include /*顺序表的定义:*/ #include #define ListSize 100 /*表空间大小可根据实际需要而定,这里假设为100*/ typedef int DataType; /*DataType可以是任何相应的数据类型如int, float或char*/ typedef struct { DataType data[ListSize]; /*向量data用于存放表结点*/ int length; /*当前的表长度*/ }SeqList; void main() { SeqList L; int i,x; int n=10; /*欲建立的顺序表长度*/ L.length=0; void CreateList(SeqList *L,int n); void PrintList(SeqList L,int n); int LocateList(SeqList L,DataType x); void InsertList(SeqList *L,DataType x,int i); void DeleteList(SeqList *L,int i);

相关文档
最新文档