数据结构第二次试验.地铁换乘

数据结构第二次试验.地铁换乘
数据结构第二次试验.地铁换乘

数据结构实验报告

(二)

学院自动化学院

学号08016332

姓名徐璐峰

日期2017-12-18

实验目的

1)熟练掌握图的存储方式;

2)了解图的特性,学习在实际问题背景下灵活运用图;

3)掌握图的两种最短路径算法。

实验内容

为简化问题,假设南京现有三条地铁线:1号线、2号线和3号线,线路都是双向的。3条地铁线的站点名分别如下,地铁线交叉的换乘点用T1、T2等表示。请根据3条地铁线的站点和换乘点构造图。编写程序,任意输入两个站名名称,输出乘坐地铁最少需要经过的车站数量(含输入的起点和终点,换乘站点只计算一次)。

地铁1号线(直线)经过车站:A1 A2 A3 T1 A4 A5 A6 A7 A8 T2 A9 A10 A11 A12 T3 A13 A14 A15 T4 A16

地铁2号线(直线)经过车站:B1 T5 B2 B3 B4 B5 T2 B6 B7 B8 B9 B10 B11 T3 B12 B13 T6 B14 B15

地铁3号线(环线)经过车站:C1 C2 C3 C4 C5 T1 C6 C7 C8 C9 C10 T5 C11 C12 C13 T6 C14 C15 T4 C16 C17 C18

实验要求

1)用户从键盘输入两个不同的站名,程序输出最少需要经过的车站数量(含

输入的起点和终点,换乘站点只计算一次);

2)分别基于迪杰斯特拉算法和弗洛里德算法实现上述地铁换乘问题;

3)程序功能模块的划分要适当,多使用流程图来描述算法结构。

1需求分析

1)输入的形式和输入值的范围。输入的形式需要是地铁站的名称,如“A1”、“B7”、“C14”。所输入的的站点名不能是所要求的站点名之外的名称。

2)输出的形式。所输出的是基于弗洛里德算法与迪杰斯特拉算法进行的最短路径长度求解的结果,以及最短路径的车站路径编号,并在输入错误的时候允许重复输入。

3)程序所能达到的功能。用户输入车站起点与车站终点之后,通过迪杰斯特拉算法与弗洛伊德算法,输出从起点到终点的最短路径长度,以及最短路径所经过的车站编号。

4)测试数据。

在程序运行的开始,会提示用户输入起点与终点,在用户输入起点与终点之后,程序会输出根据弗洛伊德算法所得到的最短路径所经过的车站数量,及经过的车站路径的编号。

之后会再输出根据迪杰斯特拉算法所得的最短路径所经过的车站数量,及所经过的车站路径的编号。如果所输入起点或终点不存在,则会提示“起点/终点输入错误,请确认后重新输入。”之后会继续出现“请输入起点/终点:”之后,用户就可以重新输入原来输入错误的起点或终点车站名。在确认起点与终点都输入正确之后,程序就会输出最短路径与路径编号。在一次程序执行完毕后,支持用户重复输入。

2概要设计

在程序中之定义了一种抽象数据类型,struct Graph,它包含三个元素,int arrAcc[56][56];//

邻接矩阵int verCount;//点数int arcCount;//边数。并且在程序开始的时候,还定义了长度为56的string型数组,用于存储所有的地铁站点。在程序运行开始的时候,会先调用

change_train函数,在change_train函数中,会先对g.arrAcc[56][56]邻接矩阵进行初始化。之

后调用floyd函数,及printres函数,输出起点到终点的最短路径长度及路径车站编号。之后,会继续调用Dijkstra函数及searchPath函数,输出起点到终点的最短路径长度及路径车站编号。

3详细设计

类视图

整个程序中所写的函数有:floyd函数,transform函数,printres函数,Dijkstra函数,searchPath函数,change_train函数。

Floyd函数 (图g, 邻接矩阵dis[][], 用来存储路径的矩阵path[][])

{

//初始化path矩阵

For(row 0 to 总的站点数)

For (col 0 to 总的站点数)

path[row][col] ← row;

For (k 0 to 总的站点数)

For (i 0 to 总的站点数)

For (j 0 to 总的站点数)

{

//存在更近的路径,更新

If (dis[i][j] > dis[i][k] + dis[k][j]) {

dis[i][j] ← dis[i][k] + dis[k][j];

path[i][j] ← path[k][j];

}

}

}

Transform函数(字符c)

{

For (i 0 to 站点数)

If (存储所有站点的数组s[i] == c)

返回 i;

}

Printres函数(图Graph*p, 经floyd函数转化后的邻接矩阵dis[56][56], 存储路径的矩阵

path[56][56], 起点start, 终点end)

{

起点数码st = transform(起点字符start);

终点数码en = transform(终点字符end);//将起点与终点转化为存储站点的数组中对应的下标输出<<”起点->终点”<< endl;

输出 << "根据弗洛伊德算法得,最少经过的车站数量: " << dis[st][en] + 1 << endl;

输出 << "经过的车站路径编号: ";

For (i 0 to 站点数)

For (j 0 to 站点数)

{

If (i == 起点数码st 并且 j == 终点数码en) //输出路径

{

stack pathrout; //压栈

k← j;

do {

k← path[i][k];

k入pathrout的栈

} 当 (k 不等于 i);

输出 << 存储站点的数组s[pathrout的栈顶元素];

弹出pathrout的栈顶元素;

length←栈pathrout的大小;

For (t 0 to length)

{

输出 << "->" << 存储站点的数组s[pathrout的栈顶元素];

弹出pathrout的栈顶元素;

}

输出 << "->" << 用户输入的终点;

跳出循环;

}

}

}

Dijkstra函数(总的站点数 n, 起点 v, 当前点到起点的最短路径长度distence, 记录当前节点的掐一个节点prev, 记录图两点间的路径长度 c[56][56])

{

bool s[56]; // 判断是否已存入该点到S集合中

For (i 0 to 总的站点数n)

{

distence[i] ← c[v][i];

s[i] = 0; // 初始都未用过该点

If (起点到第i个点的距离为 1000)

第i个点的前一个点为0;

否则

第i个点的前一个点为起点;

}

// 依次将未放入S集合的结点中,取distence[]最小值的结点,放入结合S中

// 一旦S包含了所有V中顶点,distence就记录了从源点到所有其他顶点之间的最短路径长度For (i 1 to n)

{

u ← v;

// 找出当前未使用的点j的distence[j]最小值

For (j 0 to n)

if (s[j]等于0 并且起点到第j个点的距离(temp)小于1000)

{

u ← j; // u保存当前邻接点中距离最小的点的号码

tmp ← distence[j];

}

s[u] ← 1; // 表示u点已存入S集合中

// 更新distence

For (j 0 to n)

If (s[j]为0 并且点j到点u的距离c[u][j]小于1000)

{

newdist ← distence[u] + c[u][j];

If (newdist < distence[j])

{

distence[j] ← newdist;//更新起点到第j个点的最短路径

prev[j] ← u;//更新第j个点的前一个点

}

}

}

}

searchPath函数(用于表示当前点的前一个点的数组prev, 起点 v, int u) {

int que[56];

tot ← 1;

que[tot] ← u;

tot自增;

tmp ← prev[u];

当 (tmp 不等于 v)

{

que[tot] ← tmp;

tot自增;

tmp ← prev[tmp];

}

que[tot] ← v;

For (i tot to 1)

If (i 不等于 1)

输出 << s[que[i]] << "->";

否则

输出 << s[que[i]] << endl;

换行;

}

change_train函数()

{

distence[56];记录起点到当前点的最短路径

prev[56]; 记录当前点的前一个结点

path[56][56];记录路径

matrix[56][56];用于备份的矩阵

arrAcc[56][56];邻接矩阵

g.verCount = 56;//定义总的站点的数目+1

For (i 0 to 56)

distence[i] ← max;

//初始化邻接矩阵

For (i 0 to g.verCount(56)) {

For ( k 0 to g.verCount(56))

{

If (i与k相同)

g.arrAcc[i][k] = 0;

否则

g.arrAcc[i][k] = max;

}

}

//输入A环线各点连接情况,每个边权重都为1

a[20] = { 0,1,2,49,3,4,5,6,7,50,8,9,10,11,51,12,13,14,52,15 };

For (i 0 to 19)

{

g.arrAcc[a[i]][a[i + 1]] ← 1;

g.arrAcc[a[i + 1]][a[i]] ← 1;

}

//输入B线各点连接情况,每个权重都为1

b[19] = { 16,53,17,18,19,20,50,21,22,23,24,25,26,51,27,28,54,29,30 };//19个点

For (i 0 to 18)

{

g.arrAcc[b[i]][b[i + 1]] ← 1;

g.arrAcc[b[i + 1]][b[i]] ← 1;

}

//输入C线各点连接情况,每个权重都为1

c[23] = { 31,32,33,34,35,49,36,37,38,39,40,53,41,42,43,54,44,45,52,46,47,48,31 };//23个点(因为是环线,所以点数加一)

For ( i 0 to 22)

{

g.arrAcc[c[i]][c[i + 1]] ← 1;

g.arrAcc[c[i + 1]][c[i]] ← 1;

}

For (i 0 to 56) {

For (j 0 to 56)

{

arrAcc[i][j] ← g.arrAcc[i][j];

}

}

//因为使用完弗洛伊德算法之后,g.arrAcc的返回值已经变化了,

//故在此将g.arrAcc中的值都赋值给matrix二维数组中,进行备份

For ( i 0 to 56) {

For ( j 0 to 56)

{

matrix[i][j] ← g.arrAcc[i][j];

}

}

For ( i 0 to 56) {

matrix[i][i] ← max;

}

while (true) {//利用这个死循环来实现用户的重复输入

调用floyd函数(&g, arrAcc, path);

定义judge1 = 0, judge2 = 0;

输出 << "请输入起点与终点:";

输入>> start >> end;

当 (judge1 == 0 或者 judge2 == 0) {

For (i 0 to 56) {

If (s[i] == start) { judge1 ← 1; 跳出循环; }

否则 judge1 ← 0;

}

If (judge1 == 0) {

输出 << "起点输入错误,请确认后重新输入!" << 换行;

输出 << "请输入起点:";

输入>> start;

}

For (i 0 to 56) {

If (s[i] == end) { judge2 ← 1; 跳出循环; }

否则 judge2 ← 0;

}

If (judge2 == 0) {

输出 << "终点输入错误,请确认后重新输入!" << 换行;

输出 << "请输入终点:";

输入 >> end;

}

}

n = transform(end);

v = transform(start);

调用printres(&g, arrAcc, path, start, end);

输出 << 换行;

For (i 0 to 56) {//使用完弗洛伊德算法之后,g.arrAcc已经变了,所以需要邻接矩阵进行重置

For (j 0 to 56)

{

arrAcc[i][j] ← matrix[i][j];

}

}

调用Dijkstra(56, v, distence, prev, matrix);

// 最短路径长度

输出 << "根据迪杰斯特拉算法得,最少经过的车站数量: " << distence[n] + 1 << 换行;

// 路径

输出 << "经过的车站路径编号: ";

调用searchPath(prev, v, n);

}

}

函数调用关系图

4调试分析

1)调试过程中遇到的问题及其解决办法,以及对整个设计和实现过程的回顾讨论与分析;

问题一:在进行完floyd算法之后,邻接矩阵arrAcc[56][56]的值已经变化了,

此时再利用这个矩阵进行接下来的Dijkstra算法,以及在用户九子那个重复输

入,重复调用floyd与Dijkstra函数,都是不能得出正确的结果的。在对这个点

进行调试的时候,就颇费了些功夫,最后不得不先将arrAcc数组储存起来,每

次在调用floyd之前,都新建一个matrix[56][56]数组,将arrAcc[56][56]数组中

的值都复制进来,之后让floyd函数调用matrix数组,而不再调用arrAcc数组。

问题二:在借用网上的代码的时候,网上的算法中,无论矩阵还是数组,下标

都是从1开始的,但我自己所建的数组,为了节省内存,都是从0开始的,所

以在将从1开始的数组以及矩阵转化为从0开始的数组与矩阵的时候,废了很

多麻烦。但无论是从0开始,还是从1开始,只是表达数组与矩阵的思想不同,

效果都是一样的。

问题三:在设计实现用户的重复输入的过程中,一直找不到如果用户输入错误之

后,重新输入时,输入正确之后,结束循环的条件,就一直陷入死循环中。最

后,就设置了judge1和judge2两个数来记录是否能够在已有的站点中找到所

输入的站点。在依据用户输入的站点对已有的站点数组进行遍历的时候,在数

组中的站点与输入的站点不相同的时候,用0对judge1/judge2进行重复赋值,

一旦找到站点数组中的某个站点与用户所输入的站点相同的时候,用1对

judge1/judge2进行赋值,并且break。判断循环的条件就是judge1/judge2==0。

问题四:在整个程序中涉及到很多对矩阵进行的操作,包括很多对于矩阵中的

值的修改,在很多情况下,在代码运行错误,以及出现意想不到的结果的时候,

通过输出中间变量矩阵来判断程序那里出现了问题是非常方便的。所以在整个

程序编写的过程中,也写了很多的将程序运行过程中生成的矩阵输出的代码,

以便弄清楚代码哪里出现了问题。

2)算法的时空分析。

空间复杂度:在整个程序运行的过程中,定义的变量有arrAcc[56][56],s[56],queue[56][56],distance[56][56],prev[56][56],path[56][56],matrix[56][56],以及三个,大小总共为64的用于记录站点编号的数组。所以程序的空间复杂度为O(6608).

时间复杂度:程序中所有的循环都是以56为单位的。在整个程序运行的过程中,共进行了以56为单位的单重循环5次,双重循环8次,三重循环1次。所以整个程序的时间复杂度为O(200984).

5测试结果

当输入的车站名满足要求时:

所设计的程序能够实现重复输入,更大程度的满足用户需求。

当输入的车站名不存在时:

起点终点均不存在:

起点存在,终点不存在:

终点存在,起点不存在:

当用户重复输入错误的时候:

在设计程序的过程中,考虑了用户输入错误的情况。在用户输入错误的情况下,提示用户是起点,还是终点输入错误,之后提示用户确认后重新输入。并且支持程序的重复运行,直到用户不再需要查询路径的时候,退出程序。

6实验总结

本次实验主要就是基于弗洛里德与迪杰斯特拉算法进行最短路径的求解,两种算法虽然原理不同,但总的来说,都是对矩阵进行操作,从而得到自己想要的结果。网上也有很多有关弗洛伊德算法与迪杰斯特拉算法的代码,但将网上的代码改编为自己想要的基于地铁换乘的代码还是有很大难度的。首先需要考虑的就是在定义储存所有站点的数组的时候,地铁线路的交叉点应处在数组的什么位置,处于所有站点的末尾与处在站点的中间会是两种不同的处理方法。并且网上的很多代码都是数字作为整个图的节点,但地铁换乘的节点是站点名字,是string类型的量。在将代码从基于数字到基于string也是破费了写功夫。

创新之处:1.在初始化邻接矩阵的时候,依据每个站点在总的存储站点的数组里的顺序,定义了分别表示三条地铁线路的int型数组。用int型数组中的值来表示每个站点的下标,这样在初始化邻接矩阵的时候,只用写三个循环,就还能搞定,大大减少了代码的工作量。2.刚开始在看书上的关于floyd算法的时候,floyd算法的输出结果只有矩阵,本来以为基于floyd算法只能得到最短路径的长度,无法得出最短路径的车站编号。但查阅网上那个的资料,才发现基于floyd算法仍旧是可以输出最短路径的编号的,所以在程序输出的时候,就依据floyd算法输出了最短路径的车站编号。

3.程序增加的查错的功能,在用户输入的站点名不存在的时候,会提示用户输入错误,允许用户确认后重新输入,如果仍旧出错,则可以继续输入,直到输入正确为止。并且在用户重复输入错误的时候,面对满屏的字母,辨别哪个是正确的起点和终点是很麻烦的,所以增加了一项用来说明最终的起点与终点的功能,方便用户。

缺点:为了让网上的代码能够在我的电脑上运行,我不惜一切代价改进代码对接的接口,甚至不惜建很多很多的用来进行接口转化的数组,而不太敢于对算法的内部进行必要的调整,以至于浪费了比较多的内存空间。并且本来设想的是,将按键与代码设置联系,让用户选择不同的操作,当按“开始键”的时候,程序运行,当按“继续”键的时候,用户重复输入起

点与终点,当按“结束键”的时候,程序运行结束。但因为时间原因,最后实现的仅仅只是将程序重复执行,允许用户重复输入,并未将程序与键盘上的按键建立联系。

感受:在整个编程的过程中,自己心心念念想的只是如何让程序运行,输出自己想要的结果,并未考虑太多程序的时间复杂度与空间复杂度的问题,这也就导致了代码不够简洁,可能多谢了很多的循环,并且新建了很多的没有用,或者不必要的数组。并且也许是因为对于弗洛里德和迪杰斯特拉算法并没有透彻理解,自己也并没有尝试独立地写一写这两个算法的程序,而只是对网上的代码进行筛选,找到能够满足自己需求的代码,进行改编。也同样是这个原因,自己在改代码的过程中更加侧重的是对于不同函数之间的接口数据的转化预处理,并未触及太多floyd与Dijkstra算法内部的东西,并且对于整个算法结构的改编也不是很多。这也是一大遗憾。

7附录

只有一个“源.cpp”文件。

所写的程序修改了好几个版本,最终还是摒弃了头文件,源文件的方式,而是仅仅写了一个源文件。

数据结构第二实验

8583 顺序栈的基本操作 时间限制:1000MS 内存限制:1000K 提交次数:530 通过次数:212 题型: 编程题语言: 无限制 Description 创建一个空的顺序栈,并实现栈的入栈、出栈、返回栈的长度、返回栈顶元素、栈的遍历等基本算法。请将下面的程序补充完整。 #include #include #define OK 1 #define ERROR 0 #define STACK_INIT_SIZE 100 // 存储空间初始分配量 #define STACKINCREMENT 10 // 存储空间分配增量 typedef int SElemType; // 定义栈元素类型 typedef int Status; // Status是函数的类型,其值是函数结果状态代码,如OK等 struct SqStack { SElemType *base; // 在栈构造之前和销毁之后,base的值为NULL SElemType *top; // 栈顶指针 int stacksize; // 当前已分配的存储空间,以元素为单位 }; // 顺序栈 Status InitStack(SqStack &S) { // 构造一个空栈S,该栈预定义大小为STACK_INIT_SIZE // 请补全代码 } Status Push(SqStack &S,SElemType e) { // 在栈S中插入元素e为新的栈顶元素 // 请补全代码 }

Status Pop(SqStack &S,SElemType &e) { // 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR // 请补全代码 } Status GetTop(SqStack S,SElemType &e) { // 若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR // 请补全代码 } int StackLength(SqStack S) { // 返回栈S的元素个数 // 请补全代码 } Status StackTraverse(SqStack S) { // 从栈顶到栈底依次输出栈中的每个元素 SElemType *p = (SElemType *)malloc(sizeof(SElemType)); p = ______________________ //请填空 if(______________________)printf("The Stack is Empty!"); //请填空 else { printf("The Stack is: "); p--; while(______________________) //请填空 { printf("%d ", *p); ______________________ //请填空 } } printf("\n"); return OK; } int main() {

数据结构实验 顺序表

信息学院 数据结构实验报告 学号:姓名:班级: 课程名称:数据结构实验名称:编写一个程序,实现对顺序表的如下操作: 1)初始化 2)创建一个顺序表(表长度至少为10)3)输出所创建的顺序表 4)键盘输入插入位置和插入元素,完成对表中插入元素的运算 5)键盘输入删除位置,实现对删除算法的调用,并输出被删除元素的值 6)创建两张有序表,实现这两张有序表的合并,并输出合并后的有序表。 实验性质:√①综合性实验②设计性实验③验证性实验实验时间:试验地点:机房 本实验所用设备:pc及C++6.0

【数据结构】: #define Maxsize 100 typedef int ElemType; typedef struct {ElemType elem[Maxsize]; int last; }SqeList;//建立顺序表; 【算法思想】: 通过基本算法熟悉数据结构。 创建表,运用增删改查实现表的操作后, 合并两表。 【算法描述】: void InitList(SqeList *L){printf("表已初始化!\n");L->last=-1;} void CreateForm(SqeList *L1){ InitList(L1); int i,n; printf("请输入要建表中的数组元素的个数,且不超过100:\n"); scanf("%d",&n); printf("你将输入的元素:\n"); for(i=0;ilast++; scanf("%5d",&L1->elem[i]); } }//CreateForm()函数的功能为建立一个线性表。 int Empty(SqeList *L1){ if(L1->last==-1){printf("表为空!");return 1;} else { printf("表不为空");return 0; } }//Empty()函数判断表是否为空 void Intsert(SqeList *L1,int i,ElemType e)//在顺序表中插入新元素。{ if(Empty(L1))printf("表已满,不可插入!\n"); else { printf("请输入插入的位置\n");scanf("%5d",&i); if(i<1||i>L1->last+2)printf("插入非法操作!\n");

地铁车站主体结构施工方案

目录 1编制依据 (1) 2工程概况 (2) 2.1工程概况 (2) 2.2地质概况 (2) 2.3车站结构设计概况 (3) 3施工准备 (5) 3.1施工场地准备 (5) 3.2技术准备 (6) 3.3施工组织 (6) 3.4物资设备计划 (8) 3.5物资材料吊装 (9) 4工期计划 (10) 4.1施工进度管理 (10) 4.2施工进度计划 (10) 4.3工期保证措施 (10) 5总体施工方案 (13) 5.1施工方案概述 (13) 5.2施工顺序安排 (15) 5.3车站主体结构施工工艺流程 (16) 6结构工程施工方法 (16) 6.1单段施工步序 (16) 6.2接地网施工 (18) 6.3垫层施工方法 (18) 6.4底板施工方法 (19) 6.5侧墙施工方法 (20) 6.6结构立柱施工方法 (22)

6.7顶板、梁施工方法 (22) 6.8盾构洞门环的安装方法 (23) 6.9部结构施工 (24) 7结构工程施工技术措施 (25) 7.1模板工程施工 (25) 7.2预埋件及预留孔洞施工技术措施 (27) 7.3钢筋工程施工技术措施 (27) 7.4砼施工技术措施 (29) 7.5车站结构测量措施 (33) 7.6顶板回填及路面恢复 (34) 8质量保证措施 (35) 8.1质量保证体系 (35) 8.2检测试验方法及措施 (37) 8.3施工控制措施 (40) 9安全保证措施 (51) 9.1安全监管机构 (51) 9.2安全保证体系 (52) 9.4具体安全措施 (55) 10环境保护措施 (59) 10.1建立环境保护体系 (59) 10.2主要环境影响的控制保证措施 (60) 11施工应急预案 (62) 11.1应急原则 (62) 11.2应急组织及职责 (62) 11.3应急处理程序 (64) 11.4常见事故的预防及应对措施 (66) 1编制依据 (1) 《施工图-第四篇-车站工程-第二十五册-三江口站-第二分册-结构与防水-第一部分车站围护结

数据结构第二次单元测试

0980 输出利用先序遍历创建的二叉树的层次遍历序列(中)#include #include using namespace std; typedef struct node { char data; node *leftchild; node *rightchild; }Node; void Init(Node *&L) { L = (Node *)malloc(sizeof(Node)); } void PreCreate(Node *&L) { char ch; cin>>ch; if(ch != '#') { Init(L); L->data = ch; L->leftchild = NULL; L->rightchild = NULL; PreCreate(L->leftchild); PreCreate(L->rightchild); } else { L = NULL; } } void levelT(Node *L) { Node *p; Node *q[100]; int fornt, rear; fornt = -1; rear = -1; if(L != NULL) { rear = (rear+1)%100; q[rear] = L;

while(fornt != rear) { fornt = (fornt+1)%100; p = q[fornt]; cout<data; if(p->leftchild != NULL) { rear = (rear+1)%100; q[rear] = p->leftchild; } if(p->rightchild != NULL) { rear = (rear+1)%100; q[rear] = p->rightchild; } } } } int main() { Node *p; PreCreate(p); levelT(p); return 0; } 0981统计利用二叉树存储的森林中树的棵树(易)#include #include using namespace std; typedef struct node { char data; node *leftchild; node *rightchild; }Node; void InitTree(Node *&L) { L = (Node *)malloc(sizeof(Node)); }

地铁车站围护结构施工要点解析

地铁车站围护结构施工要点解析 摘要:地铁车站施工过程中采用明挖法施工具有非常显著的社会、经济效益,而在采用明挖法进行施工时,围护结构的设置显得尤为重要。围护结构采用钻孔灌注桩、旋喷桩相结合的施工工艺能够提高围护结构施工质量,保证止水帷幕的有效性,对现阶段车站施工有非常重要的意义。 关键词:地铁车站;钻孔灌注桩;旋喷桩;围护结构 前言 在地铁车站施工中,明挖法施工是比较常用的施工方法。与20 年前不同,当时明挖法讨论的问题是临时结构物和主体结构物的外力如何确定、地下连续墙如何与主体结构结合等,目前更多的是接近工程施工、地下水的处理、地层改良的设计方法、省力化的施工方法,考虑的是环境和节省资源的设计施工等问题。在此基础上,明挖法技术水平有了很大的提高。 在城市地铁明挖法施工中,接近施工是不可避免的。接近施工实质上是围护结构的位移问题,因此在设计和施工中特别重视接近施工所引发的各种问题的解决。围护结构对整个车站主体结构的施工有着非常重要的作用,为主体结构施工创造了一个完整的空间,形成了第一道防水体系、第一道土体反作用力支撑体系。同时,围护结构的成

功与否,与主体结构的质量也息息相关,它对施工的安全进行也显得尤为重要。 1 地铁车站中围护结构施工所采用的工艺 本文以广佛地铁线西朗车站为例进行介绍。西朗车站位于广州市荔湾区花地大道中,靠近广州地铁一号线,是佛山至广州的一个大型换乘车站。西朗车站长386.3m,标准段宽20.7m。地铁车站为两层框架结构,基本处于风化岩层地段。 在西朗车站的施工中,车站所采用的是明挖法施工的方法。明挖法具有施工简单、快捷、经济、安全的优点,城市地下工程都把它作为首选的开挖技术。其缺点是对周围环境的影响较大。明挖法车站围护结构分为钻孔灌注桩施工、旋喷桩施工以及支撑体系施工。 为保证2010 年广州亚运会前投入使用,西朗地铁车站明挖法施工前首先选用灌注桩配合旋喷桩作为止水围护结构,这种施工工艺是非常适合该地层的。 2 钻孔灌注桩施工要点 西朗地铁车站工程采用钻孔灌注桩,围护采用钻孔灌注桩加水泥选喷桩作为止水帷幕,钻孔桩数量大、桩身长,施工质量的优劣直接关系到桩基和围护工程质量,更关系到整个工程的质量,因此,必须正确地选用科学合理的施工工艺,使钻孔灌注桩达到全部优良。

地铁车站主体结构施工

第一章主体结构施工 第1节主体施工准备 1、车站主体结构施工前准备工作 (1)首先编制结构施工专项方案,报有关部门审批后实施。方案中包括设备、机具、劳动力组织、混凝土供应方式、现场质量检查方法、混凝土浇筑流程、路线、工艺、混凝土的养护及防止混凝土开裂等的各项措施。 (2)基坑开挖至设计标高后,仔细进行测量、放样及验收,严禁超挖。 (3)结构施工前,对围护结构表面进行有效的防水处理,确保围护结构表面不渗漏。 (4)在每一结构段施工前首先进行接地网施工,接地网施工结束后,再施做垫层。 (5)对侧墙、立柱、中楼板、顶板模板支撑系统进行设计、检算,并经安全专项论证、报审批准后,根据施工进度提前安排进料。 (6)对结构施工顺序、施工进度安排、施工方法及技术要求向工班及全体管理人员进行认真交底。 2、施工节段划分 车站主体结构施工遵循“纵向分段,竖向分层,从下至上”的原则,满足车站质量要求及工期里程碑节点安排,结构施工由车站两端向中间方向施作,竖向从车站底板开始自下而上施作。主体结构共划分为17个节段,每段20m左右,施工队伍分别分段同时展开流水作业,施工节段的划分主要考虑以下因素: (1)墙体纵向施工缝不应留在剪力与弯矩最大处或底板与侧墙的交接处,应留在高出底板表面不小于30cm的墙体上。 (2)明挖结构施工缝的间距宜为15~20m。

(3)环向施工缝应避开附属结构及一些设备房间的距离要求设置。 3、主体结构施工流程 车站主体结构施工工艺流程见图4-4-1-1。

图4-4-1-1 主体结构施工工艺流程图

每施工段的施工流程见表4-4-1-1所示。 主体结构每施工段施工流程表4-4-1-1

数据结构(第4版)习题及实验参考答案数据结构复习资料完整版(c语言版)

数据结构基础及深入及考试 复习资料 习题及实验参考答案见附录 结论 1、数据的逻辑结构是指数据元素之间的逻辑关系。即从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。 2、数据的物理结构亦称存储结构,是数据的逻辑结构在计算机存储器内的表示(或映像)。它依赖于计算机。存储结构可分为4大类:顺序、链式、索引、散列 3、抽象数据类型:由用户定义,用以表示应用问题的数据模型。它由基本的数据类型构成,并包括一组相关的服务(或称操作)。它与数据类型实质上是一个概念,但其特征是使用与实现分离,实行封装和信息隐蔽(独立于计算机)。 4、算法:是对特定问题求解步骤的一种描述,它是指令的有限序列,是一系列输入转换为输出的计算步骤。 5、在数据结构中,从逻辑上可以把数据结构分成( C ) A、动态结构和表态结构 B、紧凑结构和非紧凑结构 C、线性结构和非线性结构 D、内部结构和外部结构 6、算法的时间复杂度取决于( A ) A、问题的规模 B、待处理数据的初态 C、问题的规模和待处理数据的初态 线性表 1、线性表的存储结构包括顺序存储结构和链式存储结构两种。 2、表长为n的顺序存储的线性表,当在任何位置上插入或删除一个元素的概率相等时,插入一个元素所需移动元素的平均次数为( E ),删除一个元素需要移动的元素的个数为( A )。 A、(n-1)/2 B、n C、n+1 D、n-1 E、n/2 F、(n+1)/2 G、(n-2)/2 3、“线性表的逻辑顺序与存储顺序总是一致的。”这个结论是( B ) A、正确的 B、错误的 C、不一定,与具体的结构有关 4、线性表采用链式存储结构时,要求内存中可用存储单元的地址( D ) A、必须是连续的 B、部分地址必须是连续的C一定是不连续的D连续或不连续都可以 5、带头结点的单链表为空的判定条件是( B ) A、head==NULL B、head->next==NULL C、head->next=head D、head!=NULL 6、不带头结点的单链表head为空的判定条件是( A ) A、head==NULL B、head->next==NULL C、head->next=head D、head!=NULL 7、非空的循环单链表head的尾结点P满足( C ) A、p->next==NULL B、p==NULL C、p->next==head D、p==head 8、在一个具有n个结点的有序单链表中插入一个新结点并仍然有序的时间复杂度是( B ) A、O(1) B、O(n) C、O(n2) D、O(nlog2n) 9、在一个单链表中,若删除p所指结点的后继结点,则执行( A )

数据结构实验2

《数据结构》实验报告 实验序号:2 实验项目名称:顺序表的操作

附源程序清单: 1. #include #include #define LIST_INIT_SIZE100 // 数组最大值 #define INIT_ERROR-1 //初始化出错判断用 typedef struct tadDATALIST//顺序表结构体 { int nLength; //长度 int anData[LIST_INIT_SIZE]; //数组 int *pElem; }List, *pList; List C; //A和B组合后的新数组 int InitList(pList D) { int nLength = 0; int nInput = 0; char cOverSign ; //读取所有整数,输入回车结束输入 while (1) { if (scanf("%d", &nInput) != 1) //对于非法出入给出判断 { printf("非法输入!!!\n"); return INIT_ERROR; }

D-> anData[nLength] = nInput; //赋值 nLength ++; if ((cOverSign = getchar()) == '\n') //按下回车键,结束输入 { return nLength; //返回长度 } } } int Alternate(pList anData_A, pList anData_B) { C.nLength = 0; //初始化新数组的长度为0 int nIndex1 = 0; int nIndex2 = 0; while((nIndex1 < anData_A -> nLength) && (nIndex2 < anData_B -> nLength)) //当有一个数组到达长度限制后,退出执行后两个while语句中的一个 { C.anData[C.nLength] = anData_A->anData[nIndex1]; //先把A的第一个元素给c nIndex1 ++; C.nLength++; C.anData[C.nLength] = anData_B->anData[nIndex2]; //接着把B的第一个元素给C nIndex2 ++; C.nLength++; } while (nIndex1 < anData_A->nLength) { C.anData[C.nLength] = anData_A->anData[nIndex1]; nIndex1 ++; C.nLength++; } while (nIndex2 < anData_B->nLength) { C.anData[C.nLength] = anData_B->anData[nIndex2]; nIndex2 ++; C.nLength++; }

地铁车站围护结构施工要点解析

摘要:地铁车站施工过程中采用明挖法施工具有非常显著的社会、经济效益,而在采用明挖法进行施工时,围护结构的设置显得尤为重要。围护结构采用钻孔灌注桩、旋喷桩相结合的施工工艺能够提高围护结构施工质量,保证止水帷幕的有效性,对现阶段车站施工有非常重要的意义。 关键词:地铁车站;钻孔灌注桩;旋喷桩;围护结构 前言 在地铁车站施工中,明挖法施工是比较常用的施工方法。与20 年前不同,当时明挖法讨论的问题是临时结构物和主体结构物的外力如何确定、地下连续墙如何与主体结构结合等,目前更多的是接近工程施工、地下水的处理、地层改良的设计方法、省力化的施工方法,考虑的是环境和节省资源的设计施工等问题。在此基础上,明挖法技术水平有了很大的提高。 在城市地铁明挖法施工中,接近施工是不可避免的。接近施工实质上是围护结构的位移问题,因此在设计和施工中特别重视接近施工所引发的各种问题的解决。围护结构对整个车站主体结构的施工有着非常重要的作用,为主体结构施工创造了一个完整的空间,形成了第一道防水体系、第一道土体反作用力支撑体系。同时,围护结构的成功与否,与主体结构的质量也息息相关,它对施工的安全进行也显得尤为重要。 1地铁车站中围护结构施工所采用的工艺 本文以广佛地铁线西朗车站为例进行介绍。西朗车站位于广州市荔湾区花地大道中,靠近广州地铁一号线,是佛山至广州的一个大型换乘车站。西朗车站长386.3m,标准段宽20.7m。地铁车站为两层框架结构,基本处于风化岩层地段。 在西朗车站的施工中,车站所采用的是明挖法施工的方法。明挖法具有施工简单、快捷、经济、安全的优点,城市地下工程都把它作为首选的开挖技术。其缺点是对周围环境的影响较大。明挖法车站围护结构分为钻孔灌注桩施工、旋喷桩施工以及支撑体系施工。 为保证2010 年广州亚运会前投入使用,西朗地铁车站明挖法施工前首先选用灌注桩配合旋喷桩作为止水围护结构,这种施工工艺是非常适合该地层的。 2钻孔灌注桩施工要点 西朗地铁车站工程采用钻孔灌注桩,围护采用钻孔灌注桩加水泥选喷桩作为止水帷幕,钻孔桩数量大、桩身长,施工质量的优劣直接关系到桩基和围护工程质量,更关系到整个工程的质量,因此,必须正确地选用科学合理的施工工艺,使钻孔灌注桩达到全部优良。 灌注桩属于隐蔽工程,但由于影响灌注桩施工质量的因素很多,对其施工过程中的每一环节都必须要严格要求,对各种影响因素都必须有详细的考虑,如地质因素、钻孔工艺、护壁、钢筋笼的上浮、混凝土的配制、灌注等。若稍有不慎或措施不严,就会在灌注中发生质量事故,小到塌孔、缩颈,大到断桩报废,以致对整个工程质量产生不利影响。所以,必须高度重视并严格控制钻孔灌注桩的施工质量,尽量避免发生事故及减少事故造成的损失,以利于工程的顺利进行。 西朗车站根据当地的地质情况,有针对性地选择钻孔施工方法:其中位于车站两侧的桩采用旋挖钻进行施工;横跨 公路的中间段,由于地质条件良好,旋挖钻施工影响城市交通,采用人工挖孔桩的施工方法成孔。部分岩层较浅的车站围护结构亦可采用冲击钻冲击成孔的施工工艺。在围护结构的桩基施工中,桩基靠近主体结构侧墙一侧,宜远离侧墙边距离10cm 左右,并在施工时保证桩基的垂直度,避免侵入主体结构。 水下浇注混凝土是用混凝土从孔底开始灌注,将孔内泥浆置换出来,成为混凝土桩的。在浇注过程中,应及时掌握孔内混凝土面上升的高度及导管插入的深度,测定每个混凝土面位置应取两个以上的测点,测绳受拉伸、湿度等因素的影响,所标长度变化较大,须经常校正。 浇注混凝土必须连续进行,否则先浇灌进去的混凝土达到初凝,将阻止后浇灌的混凝土从导管中流

地铁车站内部结构施工方案

目录 1编制说明 (1) 1.1编制依据 (1) 1.2编制范围 (1) 1.3编制原则 (1) 2工程概况 (2) 3施工部署 (2) 3.1工程总体目标 (2) 3.2施工总体部署 (3) 3.3施工组织管理 (3) 3.4工期保证措施 (4) 4施工分块及施工顺序、工艺流程 (5) 4.1施工分块 (5) 4.2施工顺序 (6) 4.3施工流程 (6) 5钢筋、模板及混凝土施工 (7) 5.1钢筋施工 (7) 5.1.1普通钢筋施工............................................................................................................................................ 7T J S O4。 5.1.2钢筋植筋施工............................................................................................................................................ 7K0F A I。 5.2模板施工 (9) 5.3混凝土施工 (10) 5.3.1砼施工技术措施 (10) 5.3.2施工缝缝面处理 (11) 5.4预埋件及预埋留孔 (11) 5.5支架施工 (11) 5.5.1支架搭设 (11) 5.5.2轨顶风道支架体系设计验算 (15) 6质量保证措施 (16) 6.1模板工程质量保证措施 (16) 6.2钢筋工程质量保证措施 (16) 6.3混凝土浇筑质量保证措施: (17) 6.4支架搭设质量保证措施: (18) 7安全文明施工措施 (18)

地铁车站围护结构施工方案

城市轨道交通X号线 X期工程 XX标 XXX站围护结构方案 编制: 复核: 审批: XXXX城市轨道交通X号线 X期工程XX标项目经理部 二0一六年九月

目录 1 工程概述 (1) 1.1 编制依据 (1) 1.2 工程概况 (2) 1.2.1 工程规模 (2) 1.2.2 结构形式 (2) 1.3 周边环境 (2) 1.3.1 周边建(构)筑物情况 (2) 1.3.2 管线情况 (2) 1.3.3 其它情况 (3) 1.4主要工程数量 (3) 2 工程地质及水文地质 (1) 2.1 工程地质 (1) 2.2 水文地质条件 (2) 3 机械设备、人员配置计划 (3) 3.1 机械设备配置 (3) 3.2 人员配置 (4) 4 围护结构施工方案 (5) 4.1 施工组织安排 (5) 4.1.1 安排原则 (5) 4.1.2 施工安排5 4.2 施工顺序及进度 (6) 4.2.1 钻孔桩施工顺序 (6)

4.2.2 单桩施工进度 (7) 4.3 钻孔桩及格构柱施工方法及技术措施 (7) 4.3.1 施工工艺流程 (7) 4.3.2 施工方法 (9) 4.4 冠梁施工 (31) 4.4.1 冠梁施工安排及概况 (31) 4.4.2 主要工程数量 (31) 4.4.3 冠梁施工流程 (32) 4.4.4 施工技术控制措施 (32) 5 工期保证措施 (35) 6 质量保证措施 (36) 6.1 过程质量措施 (36) 6.1.1 文件和资料的控制 (36) 6.1.2 物资采购和进货检验的控制 (37) 6.1.3 测量控制 (37) 6.2 钻孔桩施工质量保证措施 (37) 6.3 冠梁施工质量保证措施 (39) 7 安全保证措施 (40) 7.1 安全技术保证措施 (40) 7.2 钢筋笼起吊安全注意事项 (41) 7.3 冠梁施工安全保证措施 (42) 7.4 机械设备使用安全保证措施 (43) 44

地铁车站主体结构及防水工程施工监理实施细则

XG-T-003 编号:007 地铁车站工程主体结构及防水工程 质量监理实施细则 编制: 日期: 审批: 日期: 上海新光建设工程监理咨询公司 目录 1、工程概况及专业工程特点 (1) 2、编制依据 (1) 3、监理工作流程 (2) 4、监理控制要点及目标值 (2) 4、1结构工程监理控制要点 (2) 4、2防水工程监理控制要点 (12) 4、3接地及防迷流工程监理控制要点 (15) 5、监理平行检验计划 (16) 6、监理工作得方法及措施 (16) 7、安全生产、文明施工 (17) 8、旁站监理计划 (17)

1、工程概况及专业工程特点 1、1 工程概况 1、1、1 工程名称(指本地铁车站工程名称)才 1、1、2建设单位 1、1、3设计单位 1、1、4施工单位 1、1、5监理单位 1、1、6本车站工程内容及工期要求(从设计说明与施工组织设计中摘录) 1、2 专业工程特点 1、2、1 车站主体结构工程分包单位名称及承包方式 1、2、2 主体结构工程内容及工期要求 1、2、3 主体结构工程施工方法及采取得主要技术措施 (从施工组织设计中摘录) 2、编制依据 2、1 《建设工程监理规范》 (GB50319-2000); 2、2 《建筑工程施工质量验收统一标准》 (GB50300-2001); 2、3 《混凝土结构工程质量验收规范》 (GB50204-2002); 2、4 《建筑地基基础工程施工质量验收规范》 (GB50202-2002); 2、5 《地下防水工程技术规范》 (GB50108-2001); 2、6 《地下防水工程质量验收规范》 (GBJ50208-2002); 2、7 《地下铁道工程施工及验收规程》 (GB50299-1999); 2、8 《上海地铁基坑工程施工规程》 (SZ-08-2000); 2、9 《市政地下工程施工及验收规程》 (DGJ08-236-1999); 2、10《建筑地基基础设计规范》(GB50007-2002); 2、11 《地基基础设计规范》 (DBJ08-11-1999); 2、12 《钢筋焊接及验收规程》 (JGJ18-96); 2、13 《钢筋机械连接通用技术规程》 (JGJ107-96); 2、14 《钢筋等强度滚轧直螺纹连接技术规程》 (DBJ/CT005-99); 2、15 《普通混凝土配合比设计规程》 (JGJ55-2000);

地铁附属围护结构工法桩方案(精品)

目录 第一章工程概况 (1) 一、工程概况 (1) 二、浦沿站工程地质、水文地质概况 (4) (1)、浦沿站工程地质情况 (4) (2)、浦沿站水文情况 (4) 第二章编制依据 (7) 第三章施工部署 (8) 一、项目班子组织与管理 (8) 二、施工总平面布置 (8) 三、主要工程数量 (9) 第四章施工方案 (10) 一、施工流程及主要施工参数 (10) 二、施工方法 (13) 三、施工要点及特殊情况处理 (18) 四、H型钢起拔方案 (19) 五、SMW工法桩质量控制要点 (21) 六、测量技术措施 (23) 七、雨季施工措施 (24) 第五章施工机械设备及劳动力投入 (26) 一、拟投入的施工机械设备 (26) 二、拟投入的劳动力 (26) 第六章施工进度计划及保证措施 (28) 一、施工筹划 (28) 二、进度计划 (28) 三、施工进度保证措施 (30) 第七章管理措施 (32) 一、技术管理措施 (32) 二、质量管理措施 (32) 三、安全管理措施 (35) 四、文明施工措施 (37)

第一章工程概况 一、工程概况 杭州地铁4号线南延段浦沿站为杭州地铁4号线一期工程的起点站,站前设单渡线,站后设折返线加双停车线。车站位于东冠路和浦沿路交叉口,沿浦沿路南北向布置,北侧为新浦河,南侧为化工路。 杭州地铁4号线1标浦沿站为地下二层岛式车站,车站有效站台中心线里程:K2+570.415,站台宽度12m,有效站台长度120m。车站主体总长590.92m,标准段宽20.7m,深16.3m。端头井段宽24.8 m,南端头井深18.2m,北端头井深 17.0m。车站共设置8个出入口及3组风亭、其中1个预留出入口,4个紧急疏散口。 车站附属结构覆土一般为为 3.75m~5.11m,采用明挖顺筑法施工,出入口及风道等附属围护结构采用Φ850@600SMW工法桩加内支撑的围护结构,内支撑设2道,首道为混凝土支撑,水平间距一般为6m;第二道为钢支撑,水平间距3m,采用Φ609,t=16mm支撑;在集水坑底部,对地基进行旋喷加固。 图1-1、浦沿站平面布置示意图(一)

数据结构第二次实验报告

数据结构与算法分析课程设计报告 课题名称: A Text Editor Imlementation 提交文档学生姓名:苟丁 提交文档学生学号: 0843042229 同组成员名单:无 指导教师姓名:孙界平 指导教师评阅成绩: 指导教师评阅意见: . . 提交报告时间:2010 年 5 月 7 日

1. 实验题目:带括号的算术表达式求值 2. 实验的目的和要求: 1.采用C++的ASCII码文件和串函数实现; 2.熟练掌握串运算的应用; 3.熟练掌握计算机系统的基本操作方法,了解如何编辑、编译、链接和运行一 个C++程序; 4.上机调试程序,掌握查错、排错使程序能正确运行 3.实验的环境: 1、硬件环境:联想笔记本电脑,Intel(R) Pentium(R) Dual T3400 ,2GB内存 2、软件环境:Windows XP 下的Microsoft Visual Studio 2008 4.算法描述: ●具体操作与函数描述 (1)编辑一个文本文件,命名为text.txt. (2)函数run()提供给用户选择符的输入:w,r,I,d,f,c,q,h,n,p,b,e,g,v. 用户可以选择H选择符寻求帮助,得知操作符分别代表的动作。 (3) R代表函数Read()将文本读入缓冲区,缓冲区以前的任何内容都将将消失。 (4) W代表函数Write()将缓冲区的内容写入文本文件。 (5) I代表函数Insert()插入新行,用户可以在适当的提示下键入新行并提供新行。 (6) D代表delete()行数所执行的删除操作,可以删除当前行,并进入下一行。 (7) F代表函数findChar(),用于查找目标行。 (8) C代表函数changLine(),将用户请求的字符串修改成用户请求的替换文本,可选择的是仅在当前行中有效。 (9) Q代表函数quit(),用户执行此命令可以退出编辑。 (10)N代表函数next(),用户可以从当前行移到下一行。 (11)P代表函数pre(),用户可以从当前行移到下一行。 (12)E代表end(),可以移到最后一行。 (13)G代表go(),用户可以指定到选择的行。 (14)V查看缓冲区的全部内 ●测试程序说明:

数据结构试验二

《数据结构》实验报告二 班级:学校: 学号:姓名: 程序名:日期: 一、上机实验的问题和要求: 单链表的查找、插入与删除。设计算法,实现线性结构上的单链表的产生以及元素的查找、插入与删除。具体实现要求: 1.从键盘输入20个整数,产生不带表头的单链表,并输入结点值。 2.从键盘输入1个整数,在单链表中查找该结点的位置。若找到,则显示“找到了”;否则,则显示“找不到”。 3.从键盘输入2个整数,一个表示欲插入的位置i,另一个表示欲插入的数值x,将x插入在对应位置上,输出单链表所有结点值,观察输出结果。 4.从键盘输入1个整数,表示欲删除结点的位置,输出单链表所有结点值,观察输出结果。 5.将单链表中值重复的结点删除,使所得的结果表中个结点值均不相同,输出单链表所有结点值,观察输出结果。 6.删除其中所有数据值为偶数的结点,输出单链表所有结点值,观察输出结果。 7.把单链表变成带表头结点的循环链表,输出循环单链表所有结点值,观察输出结果。 8.(★)将单链表分解成两个单链表A和B,使A链表中含有原链表中序号为奇数的元素,而B链表中含有原链表中序号为偶数的元素,且保持原来的相对顺序,分别输出单链表A和单链表B的所有结点值,观察输出结果。 二、程序设计的基本思想,原理和算法描述: (包括程序的结构,数据结构,输入/输出设计,符号名说明等) 这是一个带头结点的线性链表,数据域存放整形数据,由用户输入。头结点数据域存链表长度,所以程序中有个求链表长度的函数 int LengthList(LinkList L); //求链表长度 L是指向头结点的指针,将长度值存入语句为 L->data = LengthList(L); 为了实时观察链表情况,程序中有个输出链表数据的函数 void PrintList(LinkList L); //输出链表 程序可以实现8种不同的操作,这8种不同的操作由8个函数实现,分别是 void CreateList(LinkList &L); //创建链表 void Locate(LinkList L); //查询数值

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

数据结构实验报告 实验名称:实验二——车厢重排 学生姓名: 班级: 班内序号: 学号: 日期: 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

地铁车站出入口、风亭围护结构施工方案

新建铁路珠机城际轨道交通工程拱北至横琴段 湾仔站附属围护结构 施工方案 编制: 审核: 批准: 中交珠海城际轨道交通项目二工区项目经理部 年月日

目录 1编制依据 (3) 1.1工程所在地的现场调查资料 (3) 1.2主要施工及验收规范、规程及标准 (3) 2工程概况 (3) 2.1设计概况 (3) 2.2工程地质与水文条件 (4) 2.3工期要求 (5) 3施工安排 (5) 3.1施工组织机构 (5) 3.2施工现场布置 (6) 4施工准备 (7) 4.1场地平整 (7) 4.2现状管线拆改 (7) 4.3劳动力准备 (7) 4.4材料准备 (8) 4.5机械准备 (8) 4.6技术准备 (9) 5施工方法及措施 (9) 5.1测量放线 (9) 5.2施工工艺流程 (9) 5.3监控量测 (14) 6质量验收及标准 (15) 6.1质量目标 (15) 6.2质量验收 (15) 6.3质量保证措施 (18) 6.4常见问题及处理措施 (18) 7安全管理体系及保证措施 (22) 7.1方针及目标 (22) 7.2消防、保卫、职业健康安全工作措施 (22) 7.3施工现场安全技术措施 (25) 7.4重要安全控制措施 (26) 8环境保护、文明施工管理体系及保证措施 (27) 8.1自然环境保护 (27) 8.2施工现场环保措施 (27) 8.3施工现场噪音及灯光控制措施 (27) 8.4施工污水处理 (28) 8.5施工粉尘控制 (28) 9突发事件应急预案 (29) 9.1应急组织体系 (29) 9.2应对突发事件的准备措施 (29) 9.3应对突发事件的组织措施 (30) 9.4应对突发事件的安全防范措施 (30) 10雨季施工措施 (32)

数据结构--使用C++语言描述(第二版)实验报告第二次实验

#include class Term { public: Term(int c,int e); Term(int c,int e,Term* nxt); Term* InsertAfter(int c,int e); private: int coef; int exp; Term *link; friend ostream & operator<<(ostream &,const Term &); friend class Polynominal; }; Term::Term(int c,int e):coef(c),exp(e) { link=0; } Term::Term(int c,int e,Term *nxt):coef(c),exp(e) { link=nxt; } Term* Term::InsertAfter(int c,int e) { link=new Term(c,e,link); return link; } ostream & operator<<(ostream & out,const Term & val) { if(val.coef==0) return out; out<>(istream&, Polynominal &); friend Polynominal& operator +(Polynominal &, Polynominal &); friend Polynominal& operator *(Polynominal &, Polynominal &); }; Polynominal::Polynominal() { theList=new Term(0,-1); theList->link=theList; } Polynominal::~Polynominal() { Term* p=theList->link; while(p!=theList){ theList->link=p->link; delete p; p=theList->link; } delete theList; } void Polynominal::AddTerms(istream & in) { Term* q=theList; int c,e; for(;;){ cout<<"请输入多项式系数和指数:\n"<>c>>e; if(e<0) break; q=q->InsertAfter(c,e); } } void Polynominal::Output(ostream& out) const { int first=1; Term *p=theList->link; cout<<"结果为:\n"<link){ if(!first && (p->coef>0)) out<<"+"; first=0; out<<*p; } cout<<"\n"<link; q=q1->link; while (p->exp>=0){ while (p->expexp)

相关文档
最新文档