文档库 最新最全的文档下载
当前位置:文档库 › 实验三 二苯基乙醇酸重排

实验三 二苯基乙醇酸重排

实验三   二苯基乙醇酸重排
实验三   二苯基乙醇酸重排

二苯基乙醇酸重排

一、实验目的

1、掌握芳香族α-二酮重排反应的原理

2、掌握有色物质的纯化方法

二、实验原理

二苯乙二酮与氢氧化钾溶液回流,重排生成二苯基乙醇酸。反应过程如下:

生成稳定的羧酸盐是反应的推动力,一旦生成羧酸盐,经酸化后即产生二苯乙醇酸。

三、实验药品及物理常数

四、实验装置图

五、实验步骤

1.在50ml圆底烧瓶中加入8.5ml95%乙醇和

2.75g二苯基乙二酮,使固体溶解。

2.在另一烧瓶中将2.75g氢氧化钠溶于6ml水中,在振荡下加入圆底烧瓶中,装上冷凝管回流15min,反应液由黑色变成棕色。

3.最后将反应液转移到烧杯中,盖上表面皿静置过夜,得二苯基乙醇酸钠盐结晶,抽滤,用2ml95%乙醇洗涤固体。

4.将固体溶于尽量少的热水中,加活性炭脱色并趁热过滤,滤液用浓盐酸酸化至PH=2.

5.反应物冷至室温后用冰水浴冷却,抽滤得固体用冷水洗涤。

6.在空气中干燥得产物,称重测定熔点。

六、实验记录

时间操作现象备注

火车重排问题

实验报告 实验课名称:数据结构实验二 实验名称:火车重排问题 班级:20130612 学号:13姓名:李寅龙时间:2014-5-18 一、问题描述 ①问题描述 一列货运列车共有n节车厢,每节车厢将停放在不同的车站。假定n个车站的编号分别为1~n,即货运列车按照第n站至第1站的次序经过这些车站。为了便于从列车上卸掉相应的车厢,车厢的编号应与车站的编号相同,这样,在每个车站只要卸掉最后一节车厢。所以,给定任意次序的车厢,必须重新排列它们。 车厢的重排工作可以通过转轨站完成。在转轨站中有一个入轨、一个出轨和k个缓冲轨,缓冲轨位于入轨和出轨之间。假定缓冲轨按先进先出的方式运作,设计算法解决火车车厢重排问题。 ②基本要求 ●设计存储结构表示n个车厢、k个缓冲轨以及入轨和出轨; ●设计并实现车厢重排算法; ●分析算法的时间性能。 二、数据结构设计 创建队列结构和相关操作函数 typedef struct { int *base; int front; int rear; }SqQueue; int InitQueue(SqQueue &Q){ Q.base=(int *)malloc(MAXSIZE*sizeof(int)); if(!Q.base) exit(-2); Q.front=Q.rear=0; return 1;} int DestroyQueue(SqQueue &Q){//销毁队列 free(Q.base); return 1;} int QueueEmpty(SqQueue Q){//判断队空 return (Q.front-Q.rear)%100==0 ? 1: 0;} int Getfront(SqQueue Q ,int &front){//读取队头元素 if(QueueEmpty(Q)) exit(0); front=Q.base[Q.front];

火车调度问题PROJECT

Project1 火车车厢重排调度 年级:2014级 学院:电子与信息工程学院 班级:智能科学与技术、自动化姓名:王金顶 14350046 姓名:王帆 14350045 姓名:张宇航 14350069

【题目要求】 1.问题: 一列火车要将n节车厢分别送往n个车站,车站按照n,n-1,…,1的编号次序经过车站。假设车厢的编号就是其目的地车站的编号。 2.要求: 给定一个任意的车厢排列次序。重新排列车厢,使其按照从1到n的次序排列。规定重排调度时车厢只能从入轨到缓冲铁轨,或者从缓冲铁轨到出轨。【数据结构与算法】 本程序将栈的空间设为25(可以通过全局常量maxstack直接修改),栈的最大数量设为100(可以直接修改)。可以处理任意少于100个任意次序车厢的火车重排调度问题。 流程图如图1:

图1 总流程图【测试数据、结果及分析】 实验1:顺序输入 车厢节数:10 车厢顺序:1 2 3 4 5 6 7 8 9 10 测试结果如图2。

图2 实验1测试结果 测试序列重排成功,使用0个栈,返回值正常,实验程序运行良好。 实验2:倒序输入 车厢节数:10 车厢顺序:10 9 8 7 6 5 4 3 2 1 测试结果如图3。 图3实验2测试结果 测试序列重排成功,使用1个栈,实验程序运行良好。 实验3:乱序输入

车厢节数:10 车厢顺序:3 2 4 5 7 8 9 6 1 10 测试结果如图4。 图4实验3测试结果 测试序列重排成功,使用7个栈,实验程序运行良好。 实验4:乱序输入 车厢节数:25 车厢顺序:25 2 6 4 5 3 7 23 9 19 11 12 16 14 15 13 17 18 10 22 21 20 8 24 1 测试结果如图5。

火车车厢重排问题,队列,c语言

计算机科学与工程学院 《算法与数据结构》试验报告[一] 专业班级10级计算机工程02 试验地点计算机大楼计工教研室学生学号1005080222 指导教师蔡琼 学生姓名肖宇博试验时间2012-4-21 试验项目算法与数据结构 试验类别基础性()设计性()综合性(√)其它()试 验目的及要求(1)掌握队列的特点及其存储方法;(2)掌握队列的常见算法和程序实现。 成 绩评定表 类别评分标准分值得分合计 上机表现积极出勤、遵守纪律 主动完成设计任务 30分 程序与报告程序代码规范、功能正确 报告详实完整、体现收获 70分 备注: 评阅教师: 日期:年月日

出 轨 入 轨 581 H 1 H 3 H 2 963 742 出 轨 入 轨 58 H 1 H 3 H 2 96 7 4321 出 轨 入 轨 5 H 1 H 3 H 2 96 87 54321 出 轨 入 轨 H 1 H 3 H 2 987654321 (a) 将369、247依次入缓冲轨 (b) 将1移至出轨,234移至 出轨 (c) 将8入缓冲轨,5移至出轨 (d) 将6789移至出轨 试 验 内 容 一、实验目的和要求 1、实验目的: (1)掌握队列的特点及其存储方法; (2)掌握队列的常见算法和程序实现。 2、实验内容: 火车车厢重排问题。 转轨站示意图如下: 火车车厢重排算法伪代码如下: 出 轨 入 轨 581742963 987654321 H 1 H 3 H 2

1. 分别对k个队列初始化; 2. 初始化下一个要输出的车厢编号nowOut = 1; 3. 依次取入轨中的每一个车厢的编号; 3.1 如果入轨中的车厢编号等于nowOut,则 3.1.1 输出该车厢; 3.1.2 nowOut++; 3.2 否则,考察每一个缓冲轨队列 for (j=1; j<=k; j++) 3.2.1 取队列j 的队头元素c; 3.2.2 如果c=nowOut,则 3.2.2.1 将队列j 的队头元素出队并输出; 3.2.2.2 nowOut++; 3.3 如果入轨和缓冲轨的队头元素没有编号为nowOut的车厢,则 3.3.1 求小于入轨中第一个车厢编号的最大队尾元素所在队列编号j; 3.3.2 如果j 存在,则把入轨中的第一个车厢移至缓冲轨j; 3.3.2 如果j 不存在,但有多于一个空缓冲轨,则把入轨中的第一个车厢移至一个 空缓冲轨;否则车厢无法重排,算法结束; 3、实验要求: 使用顺序存储队列的方式完成该实验。 二、设计分析 根据实验要求,采用队列来完成本次实验。 实验中定义了三个队列,一个用来存储输入的车厢号,另两个用来存储缓存出队顺序及序号。 三、源程序代码 #include #include #define Max 20 typedef struct { int data[Max]; int front,rear; }squeue; void initqueue(squeue *&q) { q=(squeue *)malloc(sizeof(squeue)); q->front=q->rear=0; }

《有机合成》教学大纲

《有机合成》教学大纲 一、课程基本信息 中文名称:有机合成 英文名称:Organic Synthesis 课程编码:081029B 总学时:32学时 总学分:2学分 适用专业:化学专业 先修课程:无机化学、有机化学 课程类别:专业拓展课 二、课程的性质、目标和任务 有机合成是化学专业的专业任选课之一,本课程通过系统学习有机合成的重要反应、重要方法和重要试剂,以及有机合成策略、技巧和有关理论,使学生掌握有机合成中正确的思维方法;初步掌握设计复杂化合物合成路线的基本技能;了解有机合成领域的新成果和发展趋势;培养学生灵活运用所学知识、综合分析和解决问题的能力。 三、课程教学基本要求 根据课时要求,先进行课堂讲授,然后安排实验。其中,课堂讲授内容占23学时,实验内容占9学时。 四、课程教学基本要求: 第一章绪论(1学时) 【教学目标与要求】 1、掌握有机合成的定义、目的、任务、研究方法;了解有机合成的发展史。 2、了解有机合成反应中存在的重要问题。 【教学重点与难点】 有机合成反应的选择性。 【教学内容】 第一节有机合成化学的定义。 第二节有机合成化学的任务。 第三节有机合成反应和方法学。

第四节有机合成反应中的重要问题。 第五节有机合成化学的研究方法。 第二章官能团化和官能团转换的基本反应(3学时) 【教学目标与要求】 1、复习回顾烷烃、烯烃、炔烃、芳烃和杂环化合物的反应。 2、复习回顾醇、胺、卤代烃、醛酮、羧酸及其衍生物、硝基和腈的反应。 3、掌握各类化合物的制备方法。 【教学重点与难点】 1、常见有机化合物的反应及相互转换。 2、各类化合物的制备方法及其立体化学要求。 【教学内容】 第一节官能团化。 第二节官能团的转换。 第三章酸催化缩合和分子重排(5学时) 【教学目标与要求】 1、掌握缩合反应的定义及分类。 2、掌握典型酸催化缩合反应机理及其在有机合成中的应用。 3、掌握典型的酸催化重排反应机理。 【教学重点与难点】 1、Friedel-Crafts反应、Mannich反应、烯胺的反应等在有机合成中的应用。 2、酸催化分子重排反应在有机合成中的应用。 3、Friedel-Crafts反应、Mannich反应、烯胺的反应、频哪醇重排、Beckmann重排、 Fries重排、Schmidt重排、联苯胺重排等酸催化缩合和重排反应在有机合成中的应用。 【教学内容】 第一节酸催化缩合反应。

迷宫问题 火车车厢重排问题 实验报告

实验报告 实验名称:数据结构实验二 实验名称:栈和队列 时间: 班级:000 学号:000 姓名:神刀公子 一、问题描述 (1)迷宫问题 ①问题描述 这是心理学中的一个经典问题。心理学家把一只老鼠从一个无顶盖的大盒子的入口处放入,让老鼠自行找到出口出来。迷宫中设置很多障碍阻止老鼠前行,迷宫唯一的出口处放有一块奶酪,吸引老鼠找到出口。 简而言之,迷宫问题是解决从布置了许多障碍的通道中寻找出路的问题。本题设置的迷宫如图1所示。 入口 出口 图1 迷宫示意图 迷宫四周设为墙;无填充处,为可通处。设每个点有四个可通方向,分别为东、南、西、北。左上角为入口。右下角为出口。迷宫有一个入口,一个出口。设计程序求解迷宫的一条通路。 ②基本要求 ●设计迷宫的存储结构。 ●设计通路的存储结构。 ●设计求解通路的算法。 ●设计迷宫显示和通路的显示方式。 ●输入:迷宫、入口及出口可在程序中设定,也可从键盘输入。 ●输出:迷宫、入口、出口及通路路径。 ③思考 ●若每个点有8个试探方向(东、东南、南、西南、西、西北、北、东北), 如何修改程序? ●如何求得所有通路? ●如何求得最短通路? (2)火车车厢重排问题 ①问题描述 一列货运列车共有n节车厢,每节车厢将停放在不同的车站。假定n个车站的编号分别为1~n,即货运列车按照第n站至第1站的次序经过这些车站。为

了便于从列车上卸掉相应的车厢,车厢的编号应与车站的编号相同,这样,在每个车站只要卸掉最后一节车厢。所以,给定任意次序的车厢,必须重新排列它们。 车厢的重排工作可以通过转轨站完成。在转轨站中有一个入轨、一个出轨和k个缓冲轨,缓冲轨位于入轨和出轨之间。假定缓冲轨按先进先出的方式运作,设计算法解决火车车厢重排问题。 ②基本要求 ●设计存储结构表示n个车厢、k个缓冲轨以及入轨和出轨; ●设计并实现车厢重排算法; ●分析算法的时间性能。 ③思考 ●如果缓冲轨按后进先出的方式工作,即用栈表示缓冲轨,应如何解决火 车车厢重排问题? 二、数据结构设计 迷宫问题和火车重排问题可以通过栈与队列实现的。迷宫的进出和车厢的出入轨和缓冲轨主要是对栈与队列的判断和操作。 int empty( STLink top[],int n) /*判断是否为空*/ { return (top[n]==NULL); } int push(STLink top[],int A,int m) /*入栈*/ { STLink p; if(!(p=(STLink)malloc(LEN))) return 0; else { p->data=A; p->link=top[m]; top[m]=p; return 1; } } int pop(STLink top[],int m) /*出栈*/ { int A; STLink p;

2012级算法与数据结构实验指导书18

《算法与数据结构》实验指导书 实验课程类别:课程内实验 实验课程性质:必修 适用专业、年级:2012级计算机大类 开课院、系:计算机科学与工程学院 学时:18 编写依据:《算法与数据结构》实验教学大纲 修订时间:2014年2月 《算法与数据结构》课程实验指导书(以下简称:指导书)是针对计算机学院所开设的对应课程的上机实验而编写的教学文件,供学生上机实验时使用。 上机的工作环境要求:Windows 2000或以上操作系统、VC++ 6.0或者其它高级程序设计语言。 学生应按指导教师的要求独立完成实验,并按要求撰写实验报告。 每一个实验,编程上机调试并且提交电子文档实验报告,以学号姓名作为文件名上传。报告内容至少包含如下内容: 1、学生基本情况:专业班级、学号、姓名 2、实验题目、实验内容 3、设计分析 4、源程序代码 5、测试用例(尽量覆盖所有分支) 6、实验总结 一.实验内容与学时分配 序次实验 题目 实验 类型 基本技能训练 学 时 一线性结构综合应用基础性(1)掌握线性结构的常用操作; (2)能够应用线性结构解决比较简单的问题。 10 二非线性结构综合应 用 设计性 (1)掌握树形、图形结构的插入、删除、查找等算法; (2)能够应用二叉树解决比较简单的问题。 4 三查找技术综合应用设计性(1)熟练掌握查找的常用算法; (2)设计和应用查找算法解决简单的实际问题。 2 四排序技术综合应用基础性(1)熟练掌握常用的排序方法,并掌握用高级语言实 现排序算法的方法; (2)深刻理解排序的定义和各种排序方法的特点,并 能加以灵活应用; (3)了解各种方法的排序过程及其依据的原则,并掌 握各种排序方法的时间复杂度的分析方法。 2 二.实验说明

迷宫问题 火车车厢重排问题 实验报告材料

实验报告

了便于从列车上卸掉相应的车厢,车厢的编号应与车站的编号相同,这样,在每个车站只要卸掉最后一节车厢。所以,给定任意次序的车厢,必须重新排列它们。 车厢的重排工作可以通过转轨站完成。在转轨站中有一个入轨、一个出轨和k个缓冲轨,缓冲轨位于入轨和出轨之间。假定缓冲轨按先进先出的方式运作,设计算法解决火车车厢重排问题。 ②基本要求 ●设计存储结构表示n个车厢、k个缓冲轨以及入轨和出轨; ●设计并实现车厢重排算法; ●分析算法的时间性能。 ③思考 ●如果缓冲轨按后进先出的方式工作,即用栈表示缓冲轨,应如何解决火 车车厢重排问题? 二、数据结构设计 迷宫问题和火车重排问题可以通过栈与队列实现的。迷宫的进出和车厢的出入轨和缓冲轨主要是对栈与队列的判断和操作。 int empty( STLink top[],int n) /*判断是否为空*/ { return (top[n]==NULL); } int push(STLink top[],int A,int m) /*入栈*/ { STLink p; if(!(p=(STLink)malloc(LEN))) return 0; else { p->data=A; p->link=top[m]; top[m]=p; return 1; } } int pop(STLink top[],int m) /*出栈*/ { int A; STLink p;

p=top[m]; A=p->data; top[m]=top[m]->link; free(p); return A; } struct Node{ /定义队列 int data; Node* next; }; 三、算法设计 1.迷宫问题: 进入格子后,需要判断此时格子位置周围障碍物的位置,对其进行压栈,判断,然后看是否满足条件,满足就进栈,不满足就弹出,然后输出不能通过建立迷宫: typedef struct LStack { Element elem; struct LStack *next; }*PLStack; int InitStack(PLStack &S) { S=NULL; return 1; } int StackEmpty(PLStack S) { if(S==NULL) return 1; else return 0; } int Push(PLStack &S, Element e) { PLStack p; p=(PLStack)malloc(sizeof(LStack)); p->elem=e; p->next=S; S=p; return 1; }

火车车厢重排问题

火车车厢重排问题源程序代码 #include #include typedef struct QNode { int data; struct QNode *next; }QNode,*QueuePtr; typedef struct { QueuePtr front; // 头指针,若队列不空,指向队列头元素 QueuePtr rear; // 尾指针,若队列不空,指向队列尾元素的下一个位置 } LinkQueue; int InitQueue (LinkQueue &Q)// 构造一个空队列Q { Q.front = Q.rear = (QueuePtr) malloc (sizeof (QNode)); if (!Q.front) return 0; // 存储分配失败 Q.front->next=NULL; return 1; } int EnQueue (LinkQueue &Q, int e) // 插入元素e为Q的新的队尾元素{ QueuePtr p; p=(QueuePtr) malloc (sizeof (QNode)); if(!p) return 0; //队列满 p->data=e; p->next =NULL; Q.rear->next =p; Q.rear =p; return 1; } int DeQueue (LinkQueue &Q) // 若队列不空,则删除Q的队头元素,用e 返回其值,并返回1; 否则返回0

{ QueuePtr p; if (Q.front == Q.rear) return 0; else { p=Q.front->next; Q.front->next=p->next; if(p->next==NULL) Q.front=Q.rear; int m=p->data; free(p); return m; } } int Getfront(LinkQueue &Q)//取队头元素 { if(Q.front==Q.rear) return 0; else return Q.front->next->data; } int Getrear(LinkQueue &Q)//取队尾元素 { if(Q.front==Q.rear) return 0; else return Q.rear->data; } int IsEmpty(LinkQueue &Q)//判断队列为空 { if (Q.front == Q.rear) return 0; return 1; } void Resort(LinkQueue &Q,LinkQueue *H,int k)//火车车厢重排{

有机合成

第一章:绪论 1原子经济其定义为“反应物的原子数目最大地进入产物”。 P1 %100?= 总和 反应物的相对原子质量量 预期产物的相对原子质原子利用率 2.一种理想的(最终是实效的)合成是指用简单的、安全的、环境友好的、资源有效的操作,快速定量地把价廉、易得的起始原料转化为天然或设计的目标分子。 P1 4.有机合成反应的选择性:化学选择,位置选择,立体选择反应。 P6 第二章:官能团化合官能团转换 5.官能团的转换:P13、17、19、20 醇和酚羟基的转换图示 吡啶的亲电取代反应图示

炔烃官能团化图示 氨基转换图示 6.酰胺的一个有用的合成反应是用溴和碱处理时,可得到减少一个碳原子的胺,称为Hofmann酰胺降解反应。使羟酸及其衍生物转化为减少一个碳原子的胺的另一个方法是采用酰基叠氮化合物热分解重排,即Curtius(柯提斯)反应。Hofmann降解反应和Curtius反应都使用于脂肪胺、芳香胺和杂环胺的合成。P25 第三章:酸催化缩合与分子重排 7.在芳环上引入氯甲基(-CH2Cl)的反应称为Blanc氯甲基化反应。P26 8.醛或酮用无机酸催化时,可以发生自身缩合或交叉缩合,酸的作用有:①提高羰基对亲核试剂的加成活性;②促使羰基化合物的烯醇化。P31 9.自身缩合:以乙醛和丙酮为例子。乙醛在无机酸催化下缩合得到β-羟基丁醛,进一步失水得到α,β-不饱和丁醛。 反应通过烯醇化结构对羰基碳发生加成作用,反应过程为:P31

10.Mannich 反应:具有烯醇式结构的化合物(如某些炔基化合物)与醛(通常为甲醛)在酸催化下,与第一、第二胺反应,生成胺甲基化衍生物的反应称为Mannich(曼尼希)反应。 P34 11.α-皮考啉反应:α-甲基吡啶在Lewis 酸无水氯化锌(无水ZnCl 2)的存在下,形成一个类似烯醇的化合物,与醛作用,失水生成α-取代乙烯吡啶,反应式如下: P40 反应过程表示如下: 12.Prins 反应:Prins (普林斯)反应是甲醛(或其他醛)在酸催化剂作用下与烯烃加成得到1,3二醇,或缩醛化得环缩醛1,3-二氧六环化合物。 P41 13.分子重排分为分子间重排和分子内重排。 P42 14.Beckmann 重排:酮肟在多磷酸、五氧化磷酸性催化条件下重排为酰胺的反应称为Beckmann(贝克曼)重排。 P43 15.联苯胺重排:指氢化偶氮化合物重排成4,4’-二氨基联苯的反应。 P45 16.Schmidt 反应:在强酸存在下,羟酸、酮、醛等于叠氮酸(HN 3)作用,生成伯胺、酰胺或腈的反应称为Schmidt 重排反应。 17.氢过氧化物重排中,在仲和叔氢过氧化物里,烷基之间移位顺序为叔R>仲R>Pr ≈H>Et 》Me 。 P49 18.工业上生产苯酚的异丙苯法就是应用氢过氧化物重排,反应式如下: P49 CH 3 CHO + CH 3 CH 3CHO + 2HC H + 2=CHOH 2+ CH 3CHOH CHCH2CHOH CH 3 OH + CH 3CHCH 2CHO OH CH 3CHCH 2CHO OH CH 3CHCH 2CHO + -H 3CH 3CH=CHCHO + OH 2 CH 3CH=OH N CH 3 + -ZnCl 2 N CH 2 CH Ph CHPh

实验2用堆栈解决火车车厢重排问题的编程

实验2用堆栈解决火车车厢重排问题的编程 一、目的 通过对本次实验,我们应: 1、加深对线性表、堆栈的认识; 2、加深接口、类、索引器的认识; 3、掌握堆栈数据结构,并应用堆栈编程解决实际问题。 二、实验准备 1、软件准备:C#.net。 2、参考数据(示例):文件夹“…\实验2\示例”中的数据。 三、实验背景描述 1、问题描述 一列货运列车共有n节车厢,每节车厢将停放在不同的车站。假定n个车站的编号分别为1 -n,货运列车按照第n站至第1站的次序经过这些车站。车厢的编号与它们的目的地相同。为了便于从列车上卸掉相应的车厢,必须重新排列车厢,使各车厢从前至后按编号1到n的次序排列。当所有的车厢都按照这种次序排列时,在每个车站只需卸掉最后一节车厢即可。我们在一个转轨站里完成车厢的重排工作,在转轨站中有一个入轨、一个出轨和k个缓冲铁轨(位于入轨和出轨之间)。图3.1a 给出了一个转轨站,其中有k= 3个缓冲铁轨H1,H2和H3。开始时,n节车厢的货车从入轨处进入转轨站,转轨结束时各车厢从右到左按照编号1至编号n的次序离开转轨站(通过出轨处)。在图3.1a 中,n= 9,车厢从后至前的初始次序为5,8,1,7,

4,2,9,6,3。图3.1b 给出了按所要求的次序重新排列后的结果。 图2.1 根据上面的描述,编写程序实现下面的功能: 编写一算法实现火车车箱的重排; 编写程序模拟图2.1所示的具有9节车厢的火车入轨和出轨的 过程。 程序主界面设计如图2.2所示。 图2.2 2、问题分析 为了重排车厢,需从前至后依次检查入轨上的所有车厢。如果正在检查的车厢就是下一个满足排列要求的车厢,可以直接把它放到出轨上去。如果不是,则把它移动到缓冲铁轨上,直到按输出次序要求

北京邮电大学数据结构第二次实验车厢重排实验报告

数据结构实验报告 实验名称:实验二——车厢重排 学生姓名: 班级: 班内序号: 学号: 日期: 1.实验要求 (1)、实验目的: ①进一步掌握指针、模板类、异常处理的使用 ②掌握栈的操作的实现方法 ③掌握队列的操作的实现方法 ④学习使用栈解决实际问题的能力 ⑤学习使用队列解决实际问题的能力 (2)、实验内容: 一列货车共有n节车厢,每个车厢都有自己的编号,编号范围从1~n。给定任意次序的车厢,通过转轨站将车厢编号按顺序重新排成1~n。转轨站共有k个缓冲轨,缓冲轨位于入轨和出轨之间。开始时,车厢从入轨进入缓冲轨,经过缓冲轨的重排后,按1~n的顺序进入出轨。缓冲轨按照先进先出方式,编写一个算法,将任意次序的车厢进行重排,输出每个缓冲轨中的车厢编号。 2. 程序分析 2.1 存储结构 链队列: 2.2 关键算法分析 (1)、入队操作:(时间复杂度为O(1)) ①.建立新结点:rear->next=new Node ②.移动队尾指针:rear=rear->next

③.赋值:rear->data=x ④.将新结点的next指针域赋为空:rear->next=NULL 入队结构示意图如下: (2)、出队操作:(时间复杂度为O(1)) 算法伪代码如下: ①.保存队头元素指针:Node*p=front->next; ②.如果为空队则抛出异常:if(!p)throw"下溢"; ③.原队头元素出列:front->next=p->next; ④.保存队头数据:T x=p->data; ⑤.释放原队头:delete p; ⑥.若队列变为空队,修改队尾指针:if(!(front->next))rear=front; ⑦.返回出队数据:return x; 出队结构示意图如下: (3)、查找队头元素:(时间复杂度为O(1)) 算法分析:1.如果是空队列,则抛出异常:if (!(front->next))throw"上溢"; 2. 否则返回队头元素:return front->next->data; (4)、查找队尾元素:(时间复杂度为O(1)) 算法分析:1.如果是空队列,返回0:if(rear==front) return 0; 2.否则返回队尾元素return rear->data; (5)、车厢重排函数:(时间复杂度为O(n)) 算法分析:1. 建立k+2个新队列:LinkQueue *rail; rail=new LinkQueue[k+2] 2.将n节乱序的车厢放进入轨:cin>>arr[j]; rail[k].EnQueue(arr[j]) 3. 将入轨中的车厢放进缓冲轨中,设置一个变量判断车厢是否成功放进缓冲轨: while((i

数据结构之火车厢重排

目录 一、功能描述 (2) 1、输入火车厢信息 (2) 2、入轨 (2) 3、出轨 (2) 4、退出 (2) 二、总体概要设计 (2) 1、系统设计框图: (2) 2、系统设计流程图 (3) 三、详细设计 (3) 1 功能一:输入火车厢信息 (3) 1)概要设计: (3) 2)算法描述: (3) 3)算法分析 (4) 2 功能二:入轨 (4) 1)概要设计: (4) 2)算法描述: (4) 3)算法分析: (7) 3 功能三:出轨 (8) 1)概要设计 (8) 2)算法描述: (8) 3)算法分析: (11) 4 功能四:退出 (11) 四、效果及存在问题 (11) 1、效果显示: (11) 1)输入火车厢信息 (12) 2)入轨 (12) 3)出轨: (12) 4)显示重排完成车厢排列 (13) 2、存在问题 (13) 五、心得及体会 (14) 六、参考文献 (14) 七、评分表(见尾页).............................. 错误!未定义书签。附录:源代码. (14)

一、功能描述 1、输入火车厢信息 设置欢迎界面,引导用户输入火车厢总长及原始火车厢排列,给系统提供必要数据信息。 2、入轨 给出每节火车厢对应转入的缓冲铁轨提示,并显示所需缓冲铁轨数。 3、出轨 给出每节火车厢出轨提示。 4、退出 如果不需要操作就退出系统。 二、总体概要设计 建立一个堆栈数组及栈顶指针数组,将所有的车厢都压入到堆栈(缓冲铁轨)中,入轨方法是使得每个堆栈里的元素从栈底到栈顶都是依次递减的,每次单节车厢出栈时,只要找到最小的栈顶元素令其依次出栈便可得到排好序的火车厢排列。 1、系统设计框图:

火车车厢重排 问题解决 c++(队列方法)

火车车厢重排问题c++解决方法(队列实现) //Queue.h #ifndef QUEUE_H #define QUEUE_H #include using namespace std; template class Queue { public: virtual void MakeEmpty()=0; virtual void Enqueue(T x)=0; virtual T Dequeue()=0; virtual bool IsEmpty()const=0; virtual bool IsFull()const=0; virtual T GetFirstItem()=0; }; class EmptyQueue { }; class FullQueue { }; #endif //LinkQueue.h //链表队列 #ifndef LINKQUEUE_H #define LINKQUEUE_H #include #include"Queue.h" using namespace std; template struct Node { T date; Node *next; }; template class LinkQueue:public Queue { template friend ostream & operator<<(ostream &s,const LinkQueue &lq);

public: LinkQueue(); ~LinkQueue(); void MakeEmpty(); void Enqueue(T x); T Dequeue(); bool IsEmpty()const; bool IsFull()const; T GetFirstItem(); T GetlastItem(); private: Node *front; Node *rear; }; template LinkQueue::LinkQueue() { front=new Node; front->next=NULL; rear=front; } template LinkQueue::~LinkQueue() { MakeEmpty(); delete front; } template void LinkQueue::Enqueue(T x) { Node *newnode; newnode=new Node; newnode->date=x; newnode->next=NULL; rear->next=newnode; rear=newnode; } template T LinkQueue::Dequeue() { if(IsEmpty()) throw EmptyQueue(); Node *p; p=front->next;

酸催化缩合和分子重排

第3章 酸催化缩合和分子重排 3.1 酸催化缩合反应 一般来说,缩合是指两个或两个以上分子经由失去某一简单分子(H 2O ,HX ,ROH ,NH 3,N 2 )形成较大的单一分子的反应。酸催化缩合反应包括芳烃、烯烃、醛、酮和醇等在催化剂无机酸或Lewis 酸催化作用下,生成正离子并于亲核试剂作用,从而生成碳-碳或碳氮等反应。 3.1.1Friedel-Crafts 反应 1. Friedel-Crafts 烷基化反应 芳烃的烷基化可以用卤代烃、烯烃、醇、醚、醛和酮烷基化试剂;常用的催化剂是无机酸(如硫酸、盐酸等)和Lewis 酸(AlCl 3,BF 3,FeCl 3,ZnCl ,,SnCl 4),反应过程中,在形成新的碳-碳键的同时,将烃基引入到芳环上并失去简单的分子。例如 用甲醛和氯化氢作试剂在酸催化剂下进行烷基化反应可以在芳环上引入氯甲基。例如 CH 3COCH 32OH ++H 2O C 6H 5CH 2 Cl+C 6H 6 6H 5CH 2C 6H 5+HCl AlCl 352% CCl 3CHO+2 H 2SO 4 24 HO C CH 3 CH 3 3CH( )2+H 2O CH 3CH 2OH+ CH 2CH 3+H 2O Cl +HCHO+HCl H 3PO 4CH 3COOH CH 2Cl +H 2O 77%

用于Friedel-Crafts (F-C)烷基化反应易生成多取代物。当所用的烷基化试剂的碳原子数为三个以上时,烷基化往往发生异构化,其原因是碳原子正离子发生重排的结果。此外,芳环上连有吸电子基团(如-NO2、-CN 、COCH3等)时,烷基化反应很难发生,甚至不发生。 分子内F-C 烃基化反应可芳环稠合。例如 类似于芳烃,烯烃也能发生F-C烃基化反应,只是它的应用不如芳烃广泛。一个典型的例子是氯代叔丁烷和乙烯在AlCl3存在下,于类-10oC 反应得到新己基氯,产率75%.反应如下 反应机理可能为 在酸催化剂下使异丁烯和叔丁烷反应是制备高辛烷值汽油的一个较便宜的方法。反应如下反应首先经过异丁烯二聚,最后一步是碳正离子从叔丁烷夺取负氢离子。反应式如下 88%50% 82% O C=CH 2CH 3 O CH 3 Ph(CH 2)4OH H 3PO 4 SiO 2,H 3PO 4 22 O H 3C CH 3OH H 3C CH 3 C H 2SO 4 CH 2 (CH 3)3CCl+CH 2=CH 2 AlCl 3 -10o C (CH 3)3CCH 2CH 2Cl (CH 3)3CCl+AlCl 3+CH 2CH +(CH 3)3C (CH 3)3C AlCl 4(CH 3)3CCH 2CH 2 (CH 3)3CCH 2CH 2Cl +AlCl 3 +AlCl 4 (CH 3)3CCH 2CH 2H 3C C CH 2H 3C +C CH 3CH 3 CH 3H 浓H 2SO 4或HF o 3)2CHCH 2C(CH 3)3

数据结构实验题目

实验一线性表 1 实验目的 通过选择下面四个题目之一进行实现,掌握如下内容: ?熟悉C++语言的基本编程方法,掌握集成编译环境的调试方法 ?学习指针、模板类、异常处理的使用 ?掌握线性表的操作的实现方法 ?学习使用线性表解决实际问题的能力 2 实验内容 2.1题目1 根据线性表的抽象数据类型的定义,选择下面任一种链式结构实现线性表,并完成线性表的基本功能。 线性表存储结构(五选一): 1、带头结点的单链表 2、不带头结点的单链表 3、循环链表 4、双链表 5、静态链表 线性表的基本功能: 1、构造:使用头插法、尾插法两种方法 2、插入:要求建立的链表按照关键字从小到大有序 3、删除 4、查找 5、获取链表长度 6、销毁 7、其他:可自行定义 编写测试main()函数测试线性表的正确性。 2.2题目2 利用线性表实现一个通讯录管理,通信录的数据格式如下:

struct DataType { int ID; //编号 char name[10]; //姓名 char ch; //性别 char phone[13]; //电话 char addr[31]; //地址 }; 要求: ?实现通讯录的建立、增加、删除、修改、查询等功能 ?能够实现简单的菜单交互,即可以根据用户输入的命令,选择不同的操作。 ?能够保存每次更新的数据(选作) ?能够进行通讯录分类,比如班级类、好友类、黑名单等等(选作) ?编写测试main()函数测试线性表的正确性 2.3题目3 利用线性表实现一个一元多项式Polynomial f(x) = a + a1x + a2x2 + a3x3+ … + a n x n 提示: Polynomial的结点结构如下: struct term { float coef; //系数 int expn; //指数 }; 可以使用链表实现,也可以使用顺序表实现。 要求: ?能够实现一元多项式的输入和输出 ?能够进行一元多项式相加 ?能够进行一元多项式相减 ?能够计算一元多项式在x处的值 ?能够计算一元多项式的导数(选作) ?能够进行一元多项式相乘(选作)

数据结构课程设计题

本课程设计的目标就是要达到理论与实际应用相结合,提高学生组织数据及编写大型程序的能力,并培养基本的、良好的程序设计技能以及合作能力。 二、《数据结构课程设计》的要求 设计中要求综合运用所学知识,解决一些与实际应用结合紧密的、规模较大的问题,通过分析、设计、编码、调试等各环节的训练,使学生深刻理解、牢固掌握数据结构和算法设计技术,掌握分析、解决实际问题的能力。 通过这次设计,要求在数据结构的逻辑特性和物理表示、数据结构的选择和应用、算法的设计及其实现等方面,加深对课程基本内容的理解。同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。 三、《数据结构课程设计》的内容 分析:问题描述; 概要设计:数据结构的设计,算法的设计,抽象数据类型的设计; 详细设计:抽象数据类型对应的C++类定义,设计每个成员函数和主函数(流程图) 实现与测试: 编写课程设计报告: 四、《数据结构课程设计》时间和人员安排 15-16周组织进行汇报演示验收;4个人一组,每个人主要承担的任务

1. 停车场管理 [问题描述] 设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。 [基本要求] 按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码及到达或离去的时刻,如汽车的输入数据格式为:(…A?,1,5),(…A?,2,10),(…D?,1,15),(…A?,3,20),(…A?,4,25),(…A?,5,30),(…D?,2,35),(…D?,4,40),(…E?,0,0),其中,…A?表示到达;…D?表示离去,…E?表示输入结束。 对每一组输入数据进行操作后的输出数据为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车离去;则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。

浅析队列、栈的应用

学期论文2 专业:计算机科学与技术_______ 班级: U计算机111__________ 学号: 1111503111_________ _ 姓名:于秀芳_________ _ 指导教师:孟敏 ________ __ 完成日期: 2012年11月29日_____ _

浅析队列、栈的应用 于秀芳 (盐城工学院优集学院江苏盐城 224051) 摘要:栈和队列是两种常用的数据结构,广泛应用在操作系统、编译程序等各种软件系统中。从数据结构角度看,栈和队列是操作受限的线性表,栈和队列的数据元素具有单一的前驱和后继的线性关系;从抽象数据类型角度看,栈和队列又是两种重要的抽象数据类型。 关键词:栈和队列;数据结构;编译程序 Analysis Of The Queue, Stack Of Applications YuXiuFang (UGS College, Yancheng Institute of Technology, Yancheng, Jiangsu 224051) Abstract:Stacks and queues are two common data structure widely used operating systems, compilers and other software systems .From the perspective of data structure, stack and queue operation is constrained linear list, stack and queue data elements having a single precursor and successor linear relationship;From the perspective of abstract data types, stacks and queues are two kinds of important abstract data type. Key words: Stack and queue ;Data structure; Compiler program 0引言: 目前我们所学的数据结构包括上学期学过的C++都运用到了栈,队列。 1 栈的逻辑结构 1.1栈的定义 栈是限定仅在表尾进行插入和删除操作的线性表,允许插入和删除的一端称为栈顶,另一端称为栈底,不含任何数据元素的栈称为空栈。 栈中元素除了具有线性关系外,还具有后进先出的特性。 1.2栈的顺序存储结构及实现 1.2.1栈的顺序存储结构 栈的顺序存储结构称为顺序栈。 顺序栈本质上是顺序表的简化,唯一需要确定的是用数组的那一端表示栈底。通常把数组中下标为0的一端作为栈底,同时附设指针top指示栈顶元素在元组中的位置。设存储栈元素的数组长度为StackSize,则栈空时栈顶指针 top=-1;栈满时栈顶指top=StackSize-1。入栈时,栈顶指针top加1;出栈时,栈顶指针top 减1。 1.2.2顺序栈的实现 (1)栈的初始化 初始化一个空栈只需将栈顶指针top置为1。 (2)入栈操作 Template Void SeqStack::Push(DataType x) {

相关文档
相关文档 最新文档