文档库 最新最全的文档下载
当前位置:文档库 › 数据结构 舞伴搭配问题完全代码

数据结构 舞伴搭配问题完全代码

数据结构 舞伴搭配问题完全代码
数据结构 舞伴搭配问题完全代码

#include

#include

#include

#include

#define queuesize 5

typedef struct //定义结构体

{

char name[20]; //定义一个长度为20的字符串,用来表示姓名

char sex; //定义一个char变量sex,用来表示性别,规定m表示男性,f 表示女性

}person_type;

typedef struct //定义循环队列结构体队列

{

person_type *qBase; //储存空间基址

int front; //头指针,若队列不空,指向队列头元素

int rear; //尾指针,若队列不空,指向队列尾元素的下一个位置

}cir_queue;

void init_queue(cir_queue *q) //初始化循环队列

{

q->qBase =(person_type *)malloc(sizeof(person_type)*queuesize);

//动态创建储存空间基址

if(!q->qBase ) //创建失败,退出程序!

{

printf("动态创建失败,程序终止!");

exit(-1);

}

q->front=q->rear=0;

}

/*

void traverse_queue(cir_queue *q) //遍历输出循环队列元素

{

int i=q->front ;

while(i != q->rear )//当头指针与尾指针相等时结束while循环

{

printf("%s\n",q->qBase[i].name );//输出元素的名字

i=(i+1)%queuesize; //解决假溢出问题

}

}

*/

bool full_queue(cir_queue *q) //判断循环队列是否为满

{//当尾指针的下一个位置等于头指针时,队列为满

// 为满返回true,否则返回false

if((q->rear+1)%queuesize == q->front )

return true;

else

return false;

}

bool empty_queue(cir_queue *q)//判断循环队列是否为空

{//当头指针位置等于尾指针时,循环队列为空,

//为空返回true,否则返回false

if(q->front == q->rear )

return true;

else

return false;

}

void en_queue(cir_queue *q,person_type p)//进队函数,使p进入队列{

if(full_queue(q))//判断是否为满

{

printf("队列已满,无法实现进队操作,程序终止!");

exit(-1);

}

else //不满进行操作

{

q->qBase[q->rear] = p;

q->rear=(q->rear+1)%queuesize; //尾指针指向下一个位置}

}

person_type de_queue(cir_queue *q)//出队函数,用p返回出队值{

person_type p;

if(empty_queue(q))//判断是否为空

{

printf("队列为空,无法实现出队操作,程序终止!");

exit(-1);

}

else //不为空进行操作

{

p=q->qBase[q->front];

q->front=(q->front+1)%queuesize;

return p;

}

}

int length_queue(cir_queue *q)//求循环队列元素个数

{

return q->rear-q->front ; //尾指针位置减去头指针位置即可

}

person_type queue_front(cir_queue *q)//访问队头元素,并返回

{

if(empty_queue(q))//判断是否为空

{

printf("队列为空,操作失败!");

exit(-1);

}

return q->qBase[q->front];

}

void dancepartners(cir_queue femaledancer,cir_queue maledancer,int lun)//舞伴配对函数{

int m = length_queue(&femaledancer); //计算女队人数

int n = length_queue(&maledancer); //计算男队人数

for(int j = 1;j<=lun;++j) //for循环表示舞会进行的轮数情况

{//通过对男女队人数的比较,进行一下操作

if(m>n)// 女队人数多于男队,女队有剩余队员

{

person_type p;

person_type q;

person_type s;

printf("------------------------");

printf("第%d轮配对情况:\n",j);

for(int i =1;i<=n;++i ) //for循环实现配对操作

{

p=de_queue(&maledancer);

q=de_queue(&femaledancer); //出队的男女舞伴

printf("男:%s",https://www.wendangku.net/doc/a013592911.html,);

printf("和女:%s配对成功\n",https://www.wendangku.net/doc/a013592911.html,);//输出配对情况

en_queue(&maledancer,p);

en_queue(&femaledancer,q); //将出队的男女舞伴重新进队

}

//输出女队剩余队员情况,并输出在下一轮首先出场的队员姓名

printf("女队中还有%d个人在等待!\n",m-n);

s=queue_front(&femaledancer); ,

printf("女队中第一个等待的是:%s\n",https://www.wendangku.net/doc/a013592911.html,);

}

else if(m

{

person_type p;

person_type q;

person_type s;

printf("------------------------");

printf("第%d轮配对情况:\n",j);

for(int i =1;i<=m;++i )

{

p=de_queue(&maledancer);

q=de_queue(&femaledancer);//出队的男女舞伴

printf("男:%s",https://www.wendangku.net/doc/a013592911.html,);

printf("和女:%s配对成功\n",https://www.wendangku.net/doc/a013592911.html,);//输出配对情况

en_queue(&maledancer,p);

en_queue(&femaledancer,q); //将出队的男女舞伴重新进队

}

//输出男队剩余队员情况,并输出在下一轮首先出场的队员姓名printf("男队中还有%d个人在等待!\n",n-m);

s=queue_front(&maledancer);

printf("男队中第一个等待的是:%s\n",https://www.wendangku.net/doc/a013592911.html,);

}

else //男女队人数相等,没有剩余队员

{

person_type p;

person_type q;

person_type s;

printf("------------------------");

printf("第%d轮配对情况:\n",j);

for(int i =1;i<=m; ++i)

{

p=de_queue(&maledancer);

q=de_queue(&femaledancer); //出队的男女舞伴

printf("男:%s",https://www.wendangku.net/doc/a013592911.html,);

printf("和女:%s配对成功\n",https://www.wendangku.net/doc/a013592911.html,);//输出配对情况

en_queue(&maledancer,p);

en_queue(&femaledancer,q);//将出队的男女舞伴重新进队}

printf("没有人剩余!\n");

}

}

}

void main()

{

person_type p,dancers[queuesize];

//键盘输入男女舞者的信息,包括姓名,性别

int i,num;

printf("输入男女dancer的总人数:\n");

scanf("%d",&num);

printf("输入姓名和性别(用m表示男性,用f表示女性),如: \nzhangsan\nm\n");

for(i=0;i

{

scanf("%s",&dancers[i].name);

getchar();

scanf("%c",&dancers[i].sex);

if(dancers[i].sex!='f'&&dancers[i].sex!='m')//判断输入信息是否合法

printf("第%d个人的信息有误,请重新输入",(i--)+1);

}

cir_queue maledancer,femaledancer;//定义两个循环队列结构体

init_queue(&maledancer);//调用init_queue()函数置空队列maledancer表示男队

init_queue(&femaledancer);//调用init_queue()函数置空队列femaledancer表示女队for(i=0;i

{

p=dancers[i];//结构体整体赋值

if(p.sex=='f')//女的进队列femaledancer

{

en_queue(&femaledancer,p);

printf("%s进女队\n",https://www.wendangku.net/doc/a013592911.html,);

}

else//男的进队列maledancer

{

en_queue(&maledancer,p);

printf("%s进男队\n",https://www.wendangku.net/doc/a013592911.html,);

}

}

/*

int j;

int m = length_queue(&femaledancer);

int n = length_queue(&maledancer);

if(m

{

person_type p;

person_type q;

person_type s;

for(j=1;j<=7;++j)

{

printf("第%d轮配对情况:\n",j);

for(int i =1;i<=m;++i )

{

p=de_queue(&maledancer);

q=de_queue(&femaledancer);

printf("男:%s",https://www.wendangku.net/doc/a013592911.html,);

printf("和女:%s配对成功\n",https://www.wendangku.net/doc/a013592911.html,);

en_queue(&maledancer,p);

en_queue(&femaledancer,q);

}

printf("男队中还有%d个人在等待!\n",n-m);

s=queue_front(&maledancer);

printf("男队中第一个等待的是:%s\n",https://www.wendangku.net/doc/a013592911.html,);

}

}

*/

/* int m =length_queue(&maledancer);

printf("%d",m);

traverse_queue(&maledancer);

traverse_queue(&femaledancer);

traverse_queue(&maledancer);

*/

int n;

printf("请输入要进行的轮数:\n");

scanf("%d",&n);

dancepartners(femaledancer,maledancer,n);

//getchar();

}

数据结构课程设计图的遍历和生成树求解

数学与计算机学院 课程设计说明书 课程名称: 数据结构与算法课程设计 课程代码: 6014389 题目: 图的遍历和生成树求解实现 年级/专业/班: 学生姓名: 学号: 开始时间: 2012 年 12 月 09 日 完成时间: 2012 年 12 月 26 日 课程设计成绩: 指导教师签名:年月日

目录 摘要 (3) 引言 (4) 1 需求分析 (5) 1.1任务与分析 (5) 1.2测试数据 (5) 2 概要设计 (5) 2.1 ADT描述 (5) 2.2程序模块结构 (7) 软件结构设计: (7) 2.3各功能模块 (7) 3 详细设计 (8) 3.1结构体定义 (19) 3.2 初始化 (22) 3.3 插入操作(四号黑体) (22) 4 调试分析 (22) 5 用户使用说明 (23) 6 测试结果 (24) 结论 (26)

摘要 《数据结构》课程主要介绍最常用的数据结构,阐明各种数据结构内在的逻辑关系,讨论其在计算机中的存储表示,以及在其上进行各种运算时的实现算法,并对算法的效率进行简单的分析和讨论。进行数据结构课程设计要达到以下目的: ?了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力; ?初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能; ?提高综合运用所学的理论知识和方法独立分析和解决问题的能力; 训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。 这次课程设计我们主要是应用以前学习的数据结构与面向对象程序设计知识,结合起来才完成了这个程序。 因为图是一种较线形表和树更为复杂的数据结构。在线形表中,数据元素之间仅有线性关系,每个元素只有一个直接前驱和一个直接后继,并且在图形结构中,节点之间的关系可以是任意的,图中任意两个数据元素之间都可能相关。因此,本程序是采用邻接矩阵、邻接表、十字链表等多种结构存储来实现对图的存储。采用邻接矩阵即为数组表示法,邻接表和十字链表都是图的一种链式存储结构。对图的遍历分别采用了广度优先遍历和深度优先遍历。 关键词:计算机;图;算法。

数据结构题目及c语言代码

目题程设计《数据结构》课)C语言程序实现采用():3选王(学时目 题1:猴子一堆猴子都有编号,编号是1,2,3 ...m,这群猴子(m个)按照1-m 的顺序围坐一圈,从第1开始数,每数到第n个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。 要求:m及n要求从键盘输入,存储方式采用向量及链表两种方式实现该问题求解。 //链表 #include #include // 链表节点 typedef struct _RingNode { int pos; struct _RingNode *next; }RingNode, *RingNodePtr; // 创建约瑟夫环,pHead:链表头指针,count:链表元素个数 void CreateRing(RingNodePtr pHead, int count) { RingNodePtr pCurr = NULL, pPrev = NULL; int i = 1; pPrev = pHead; while(--count > 0) {

pCurr = (RingNodePtr)malloc(sizeof(RingNode)); i++; pCurr->pos = i; pPrev->next = pCurr; pPrev = pCurr; } pCurr->next = pHead; // 构成环状链表 } void KickFromRing(RingNodePtr pHead, int n) { RingNodePtr pCurr, pPrev; int i = 1; // 计数 pCurr = pPrev = pHead; while(pCurr != NULL) { if (i == n) { // 踢出环 printf(\ %d, pCurr->pos); // 显示出圈循序 pPrev->next = pCurr->next;

数据结构实验报告-图的遍历

数据结构实验报告 实验:图的遍历 一、实验目的: 1、理解并掌握图的逻辑结构和物理结构——邻接矩阵、邻接表 2、掌握图的构造方法 3、掌握图的邻接矩阵、邻接表存储方式下基本操作的实现算法 4、掌握图的深度优先遍历和广度优先原理 二、实验内容: 1、输入顶点数、边数、每个顶点的值以及每一条边的信息,构造一个无向图G,并用邻接矩阵存储改图。 2、输入顶点数、边数、每个顶点的值以及每一条边的信息,构造一个无向图G,并用邻接表存储该图 3、深度优先遍历第一步中构造的图G,输出得到的节点序列 4、广度优先遍历第一部中构造的图G,输出得到的节点序列 三、实验要求: 1、无向图中的相关信息要从终端以正确的方式输入; 2、具体的输入和输出格式不限; 3、算法要具有较好的健壮性,对错误操作要做适当处理; 4、程序算法作简短的文字注释。 四、程序实现及结果: 1、邻接矩阵: #include #include #define VERTEX_MAX 30 #define MAXSIZE 20 typedef struct { int arcs[VERTEX_MAX][VERTEX_MAX] ; int vexnum,arcnum; } MGraph; void creat_MGraph1(MGraph *g) { int i,j,k; int n,m; printf("请输入顶点数和边数:"); scanf("%d%d",&n,&m); g->vexnum=n; g->arcnum=m; for (i=0;iarcs[i][j]=0;

数据结构程序设计题目共29题

目录 题目1:设计一元多项式简单计算.................................. 错误!未定义书签。题目2:链表应用1 ....................................................... 错误!未定义书签。题目3:链表应用2 .......................... 错误!未定义书签。题目4:?通讯录 ............................ 错误!未定义书签。题目5:停车场管理系统....................... 错误!未定义书签。题目6:约瑟夫环............................ 错误!未定义书签。题目7:运动会分数统计....................... 错误!未定义书签。题目8:文学研究助手问题..................... 错误!未定义书签。题目9:银行业务模拟与离散事件模拟 ............ 错误!未定义书签。题目10:学生信息管理系统任务(用顺序表/链表).. 错误!未定义书签。题目11:文章编辑功能 ....................... 错误!未定义书签。题目12:实验室管理......................... 错误!未定义书签。题目13:二叉树的基本操作(建立、求二叉树树深度、遍历).错误!未定义 书签。 题目14:纸牌游戏任务 ....................... 错误!未定义书签。题目15:算术表达式求值...................... 错误!未定义书签。题目16:内部排序算法比较.................... 错误!未定义书签。题目17:哈夫曼树的构造和哈夫曼编码/译码 ....... 错误!未定义书签。题目18:构造可以使n个城市连接的最小生成树..... 错误!未定义书签。题目19:交通咨询系统中的最短路径............. 错误!未定义书签。题目20:集合的交、并、差运算................. 错误!未定义书签。题目21:长整数四则运算...................... 错误!未定义书签。题目22:机订票系统......................... 错误!未定义书签。题目23:图书管理系统 ....................... 错误!未定义书签。题目24:哈希表应用......................... 错误!未定义书签。题目25:模拟旅馆管理系统的一个功能——床位的分配与回收.错误!未定义 书签。 题目26:地图着色问题 ....................... 错误!未定义书签。题目27:俄罗斯套娃问题...................... 错误!未定义书签。题目28:扫雷.............................. 错误!未定义书签。题目29:用C语言设计一个日历系统............. 错误!未定义书签。

数据结构实验---图的储存与遍历

数据结构实验---图的储存与遍历

学号: 姓名: 实验日期: 2016.1.7 实验名称: 图的存贮与遍历 一、实验目的 掌握图这种复杂的非线性结构的邻接矩阵和邻接表的存储表示,以及在此两种常用存储方式下深度优先遍历(DFS)和广度优先遍历(BFS)操作的实现。 二、实验内容与实验步骤 题目1:对以邻接矩阵为存储结构的图进行DFS 和BFS 遍历 问题描述:以邻接矩阵为图的存储结构,实现图的DFS 和BFS 遍历。 基本要求:建立一个图的邻接矩阵表示,输出顶点的一种DFS 和BFS 序列。 测试数据:如图所示 题目2:对以邻接表为存储结构的图进行DFS 和BFS 遍历 问题描述:以邻接表为图的存储结构,实现图的DFS 和BFS 遍历。 基本要求:建立一个图的邻接表存贮,输出顶点的一种DFS 和BFS 序列。 测试数据:如图所示 V0 V1 V2 V3 V4 三、附录: 在此贴上调试好的程序。 #include #include #include V0 V1 V4 V3 V2 ??? ? ??? ? ????????=010000000101010 1000100010A 1 0 1 0 3 3 4

#define M 100 typedef struct node { char vex[M][2]; int edge[M ][ M ]; int n,e; }Graph; int visited[M]; Graph *Create_Graph() { Graph *GA; int i,j,k,w; GA=(Graph*)malloc(sizeof(Graph)); printf ("请输入矩阵的顶点数和边数(用逗号隔开):\n"); scanf("%d,%d",&GA->n,&GA->e); printf ("请输入矩阵顶点信息:\n"); for(i = 0;in;i++) scanf("%s",&(GA->vex[i][0]),&(GA->vex[i][1])); for (i = 0;in;i++) for (j = 0;jn;j++) GA->edge[i][j] = 0; for (k = 0;ke;k++) { printf ("请输入第%d条边的顶点位置(i,j)和权值(用逗号隔开):",k+1); scanf ("%d,%d,%d",&i,&j,&w); GA->edge[i][j] = w; } return(GA); } void dfs(Graph *GA, int v) { int i; printf("%c%c\n",GA->vex[v][0],GA->vex[v][1]); visited[v]=1;

数据结构经典题目及c语言代码.

《数据结构》课程设计题目 (程序实现采用C语言) 题目1:猴子选王(学时:3) 一堆猴子都有编号,编号是1,2,3 ...m,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第n个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。 要求:m及n要求从键盘输入,存储方式采用向量及链表两种方式实现该问题求解。 //链表 #include #include // 链表节点 typedef struct _RingNode { int pos; struct _RingNode *next; }RingNode, *RingNodePtr; // 创建约瑟夫环,pHead:链表头指针,count:链表元素个数 void CreateRing(RingNodePtr pHead, int count) { RingNodePtr pCurr = NULL, pPrev = NULL; int i = 1; pPrev = pHead; while(--count > 0)

{ pCurr = (RingNodePtr)malloc(sizeof(RingNode)); i++; pCurr->pos = i; pPrev->next = pCurr; pPrev = pCurr; } pCurr->next = pHead; // 构成环状链表 } void KickFromRing(RingNodePtr pHead, int n) { RingNodePtr pCurr, pPrev; int i = 1; // 计数 pCurr = pPrev = pHead; while(pCurr != NULL) { if (i == n) { // 踢出环 printf("\n%d", pCurr->pos); // 显示出圈循序 pPrev->next = pCurr->next; free(pCurr); pCurr = pPrev->next; i = 1; }

数据结构图的遍历

#include"stdlib.h" #include"stdio.h" #include"malloc.h" #define INFINITY 32767 #define MAX_VERTEX_NUM 20 typedef enum{FALSE,TRUE}visited_hc; typedef enum{DG,DN,UDG,UDN}graphkind_hc; typedef struct arccell_hc {int adj; int*info; }arccell_hc,adjmatrix_hc[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; typedef struct {char vexs[MAX_VERTEX_NUM]; adjmatrix_hc arcs; int vexnum,arcnum; graphkind_hc kind; }mgraph_hc; typedef struct arcnode_hc {int adjvex; struct arcnode_hc *nextarc; int*info; }arcnode_hc; typedef struct vnode_hc {char data; arcnode_hc *firstarc; }vnode_hc,adjlist_hc[MAX_VERTEX_NUM]; typedef struct {adjlist_hc vertices; int vexnum,arcnum; graphkind_hc kind; }algraph_hc; int locatevex_hc(mgraph_hc*g,char v) {int i,k=0; for(i=0;ivexnum;i++) if(g->vexs[i]==v){k=i;i=g->vexnum;} return(k);}

结构设计常用数据

结构设计常用数据

————————————————————————————————作者:————————————————————————————————日期: ?

混凝土结构设计规范 表3.4.3受弯构件的挠度限值 构件类型挠度限值 吊车梁手动吊车l0/500电动吊车l0/600 屋盖、楼盖及楼梯构件 当l0<7m时 l0/200(l0/2 50) 当7m≤l0≤9 m时 l0/250(l0/ 300) 当l0>9m时 l0/300(l0/4 00) 表3.3.5 结构构件的裂缝控制等级及最大裂缝宽度的限值(mm) 环境类别钢筋混凝土结构 预应力混凝土结 构 裂缝控 制等级 w lim 裂缝控 制等级 w lim 一 三级0.30 (0.4 0) 三级 0.20 二a 0.200.10 二b 二级——三a、三一级——

b 表3.3.2混凝土结构的环境类别环境类 别 条件 一室内干燥环境; 无侵蚀性静水浸没环境 二a 室内潮湿环境; 非严寒和非寒冷地区的露天环境; 非严寒和非寒冷地区与无侵蚀性的水或土壤直接接触的环境; 严寒和寒冷地区的冰冻线以下与无侵蚀性的水或土壤直接接触的环境 二b 干湿交替环境; 水位频繁变动环境; 严寒和寒冷地区的露天环境; 严寒和寒冷地区冰冻线以上与无侵蚀性的水或土壤直接接触的环境 三a 严寒和寒冷地区冬季水位变动区环境; 受除冰盐影响环境; 海风环境 三b 盐渍土环境;

受除冰盐作用环境; 海岸环境 四 海水环境 五 受人为或自然的侵蚀性物质影响的环境 表3.5.3 结构混凝土材料的耐久性基本要求 环境等级 最大水胶比 最低强度等级 最大氯离子含量(%) 最大碱含量(k g/m 3) 一 0.60 C 20 0.30 不限制 环境等级 最大水胶比 最低强度等级 最大氯离子含量(%) 最大碱含量(kg/m 3) 二a 0.55 C25 0.20 3.0 二b 0.50(0.55) C30(C 25) 0.15 三a 0.45(0.5 0) C35(C30) 0.15 三b 0.40 C 40 0.10 表8.1.1 钢筋混凝土结构伸缩缝最大间距(m) 结构类型 室内或土 露天

数据结构课程设计之图的遍历和生成树求解

##大学 数据结构课程设计报告题目:图的遍历和生成树求解 院(系):计算机工程学院 学生: 班级:学号: 起迄日期: 2011.6.20 指导教师:

2010—2011年度第 2 学期 一、需求分析 1.问题描述: 图的遍历和生成树求解实现 图是一种较线性表和树更为复杂的数据结构。在线性表中,数据元素之间仅有线性关系,每个数据元素只有一个直接前驱和一个直接后继;在树形结构中,数据元素之间有着明显的层次关系,并且每一层上的数据元素可能和下一层中多个元素(及其孩子结点)相关但只能和上一层中一个元素(即双亲结点)相关;而在图形结构中,节点之间的关系可以是任意的,图中任意两个数据元素之间都可能相关。 生成树求解主要利用普利姆和克雷斯特算法求解最小生成树,只有强连通图才有生成树。 2.基本功能 1) 先任意创建一个图; 2) 图的DFS,BFS的递归和非递归算法的实现 3) 最小生成树(两个算法)的实现,求连通分量的实现 4) 要求用邻接矩阵、邻接表等多种结构存储实现 3.输入输出

输入数据类型为整型和字符型,输出为整型和字符 二、概要设计 1.设计思路: a.图的邻接矩阵存储:根据所建无向图的结点数n,建立n*n的矩阵,其中元素全是无穷大(int_max),再将边的信息存到数组中。其中无权图的边用1表示,无边用0表示;有全图的边为权值表示,无边用∞表示。 b.图的邻接表存储:将信息通过邻接矩阵转换到邻接表中,即将邻接矩阵的每一行都转成链表的形式将有边的结点进行存储。 c.图的广度优先遍历:假设从图中的某个顶点v出发,在访问了v之后依次访问v的各个未曾访问过的邻接点,然后再访问此邻接点的未被访问的邻接点,并使“先被访问的顶点的邻接点”先于“后被访问的顶点的邻接点”被访问,直至图中所有已被访问的顶点的邻接点都被访问到。若此时图中还有未被访问的,则另选未被访问的重复以上步骤,是一个非递归过程。 d.图的深度优先遍历:假设从图中某顶点v出发,依依次访问v的邻接顶点,然后再继续访问这个邻接点的系一个邻接点,如此重复,直至所有的点都被访问,这是个递归的过程。 e.图的连通分量:这是对一个非强连通图的遍历,从多个结点出发进行搜索,而每一次从一个新的起始点出发进行搜索过程中得到的顶点访问序列恰为其连通分量的顶点集。本程序利用的图的深度优先遍历算法。 2.数据结构设计: ADT Queue{ 数据对象:D={a i | a i ∈ElemSet,i=1,2,3……,n,n≥0} 数据关系:R1={| a i-1 ,a i ∈D,i=1,2,3,……,n} 基本操作: InitQueue(&Q) 操作结果:构造一个空队列Q。 QueueEmpty(Q) 初始条件:Q为非空队列。 操作结果:若Q为空队列,则返回真,否则为假。 EnQueue(&Q,e) 初始条件:Q为非空队列。 操作结果:插入元素e为Q的新的队尾元素。 DeQueue(&Q,e) 初始条件:Q为非空队列。 操作结果:删除Q的队头元素,并用e返回其值。}ADT Queue

数据结构图的遍历实验报告

实验项目名称:图的遍历 一、实验目的 应用所学的知识分析问题、解决问题,学会用建立图并对其进行遍历,提高实际编程能力及程序调试能力。 二、实验容 问题描述:建立有向图,并用深度优先搜索和广度优先搜素。输入图中节点的个数和边的个数,能够打印出用邻接表或邻接矩阵表示的图的储存结构。 三、实验仪器与设备 计算机,Code::Blocks。 四、实验原理 用邻接表存储一个图,递归方法深度搜索和用队列进行广度搜索,并输出遍历的结果。 五、实验程序及结果 #define INFINITY 10000 /*无穷大*/ #define MAX_VERTEX_NUM 40 #define MAX 40 #include #include #include #include

typedef struct ArCell{ int adj; }ArCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; typedef struct { char name[20]; }infotype; typedef struct { infotype vexs[MAX_VERTEX_NUM]; AdjMatrix arcs; int vexnum,arcnum; }MGraph; int LocateVex(MGraph *G,char* v) { int c = -1,i; for(i=0;ivexnum;i++) if(strcmp(v,G->vexs[i].name)==0) { c=i; break;} return c;} MGraph * CreatUDN(MGraph *G)//初始化图,接受用户输入{ int i,j,k,w; char v1[20],v2[20]; printf("请输入图的顶点数,弧数:"); scanf("%d%d",&G->vexnum,&G->arcnum);

结构设计经验的总结

十年结构设计经验的总结 1.关于箱、筏基础底板挑板的阳角问题: (1).阳角面积在整个基础底面积中所占比例极小,干脆砍了。可砍成直角或斜角。  (2).如果底板钢筋双向双排,且在悬挑部分不变,阳角不必加辐射筋,谁见过独立基础加辐射筋的?当然加了也无坏处。  (3).如果甲方及老板不是太可恶的话,可将悬挑板的单向板的分布钢筋改为直径12的,别小看这一改,一个工程省个3、2万不成问题。 2.关于箱、筏基础底板的挑板问题: (1).从结构角度来讲,如果能出挑板,能调匀边跨底板钢筋,特别是当底板钢筋通长布置时,不会因边跨钢筋而加大整个底板的通长筋,较节约。 (2).出挑板后,能降低基底附加应力,当基础形式处在天然地基和其他人工地基的坎上时,加挑板就可能采用天然地基。必要时可加较大跨度的周圈窗井。 (3).能降低整体沉降,当荷载偏心时,在特定部位设挑板,还可调整沉降差和整体倾斜。 (4).窗井部位可以认为是挑板上砌墙,不宜再出长挑板。虽然在计算时此处板并不应按挑板计算。当然此问题并不绝对,当有数层地下室,窗井横隔墙较密,且横隔墙能与内部墙体连通时,可灵活考虑。 (5).当地下水位很高,出基础挑板,有利于解决抗浮问题。 (6).从建筑角度讲,取消挑板,可方便柔性防水做法。当为多层建筑时,结构也可谦让一下建筑。 3.关于箍筋在梁配筋中的比例问题(约10~20%): 例如一8米跨梁,截面为400X600,配筋:上6根25,截断1/3,下5根25,箍筋:8@100/200(4),1000范围内加密。纵筋总量: 3.85*9*8=281kg,箍筋:0.395*3.5*50=69,箍筋/纵筋=1/4, 如果双肢箍仅为1/8,箍筋相对纵筋来讲所占比例较小,故不必在箍筋上抠门。且不说要强剪弱弯。已经是构造配箍除外。 4.关于梁、板的计算跨度: 一般的手册或教科书上所讲的计算跨度,如净跨的1.1倍等,这些规定和概念仅适用于常规的结构设计,在应用日广的宽扁梁中是不合适的。梁板结构,简单点讲,可认为是在梁的中心线上有一刚性支座,取

数据结构 图的存储、遍历与应用 源代码

实验四图的存储、遍历与应用姓名:班级: 学号:日期:一、实验目的: 二、实验内容: 三、基本思想,原理和算法描述:

四、源程序: (1)邻接矩阵的存储: #include #include #define INFINITY 10000 //定义最大值无穷大 #define MAX_VERTEX_NUM 20 //最大顶点个数 typedef int AdjMatrix[MAX_VERTEX_NUM ][MAX_VERTEX_NUM ]; typedef struct{ int vexs[MAX_VERTEX_NUM ]; //顶点向量 AdjMatrix arcs; //邻接矩阵 int vexnum,arcnum; //图的当前顶点数和弧或边数 }MGraph; void CreatGragh(MGraph G) //用邻接矩阵构造图 { int i,j,k,w; printf("请输入顶点个数和边数:\n"); scanf("%d %d",&G.vexnum,&G.arcnum); printf("请按顺序输入顶点中间用‘空格’间隔\n"); for(i=0;i #include

数据结构程序设计题目共29题

目录 题目1:设计一元多项式简单计算 (1) 题目2:链表应用1 (1) 题目3:链表应用2 (1) 题目4:通讯录 (2) 题目5:停车场管理系统............................................. 错误!未定义书签。题目6:约瑟夫环 (3) 题目7:运动会分数统计 (3) 题目8:文学研究助手问题 (3) 题目9:银行业务模拟与离散事件模拟 (4) 题目10:学生信息管理系统任务(用顺序表/链表).... 错误!未定义书签。题目11:文章编辑功能 .............................................. 错误!未定义书签。题目12:实验室管理.................................................. 错误!未定义书签。题目13:二叉树的基本操作(建立、求二叉树树深度、遍历).. (4) 题目14:纸牌游戏任务 (5) 题目15:算术表达式求值 (5) 题目16:内部排序算法比较 (5) 题目17:哈夫曼树的构造和哈夫曼编码/译码 (6) 题目18:构造可以使n个城市连接的最小生成树 (7) 题目19:交通咨询系统中的最短路径 (7) 题目20:集合的交、并、差运算 ................................ 错误!未定义书签。题目21:长整数四则运算 (7) 题目22:机订票系统.................................................. 错误!未定义书签。题目23:图书管理系统 (8) 题目24:哈希表应用 (8) 题目25:模拟旅馆管理系统的一个功能——床位的分配与回收 (9) 题目26:地图着色问题 (9) 题目27:俄罗斯套娃问题 (10) 题目28:扫雷 (11) 题目29:用C语言设计一个日历系统 (11)

数据结构实验 - 图的储存与遍历

一、实验目的 掌握图这种复杂的非线性结构的邻接矩阵和邻接表的存储表示,以及在此两种常用存储方式下深度优先遍历(DFS)和广度优先遍历(BFS)操作的实现。 二、实验内容与实验步骤 题目1:对以邻接矩阵为存储结构的图进行DFS 和BFS 遍历 问题描述:以邻接矩阵为图的存储结构,实现图的DFS 和BFS 遍历。 基本要求:建立一个图的邻接矩阵表示,输出顶点的一种DFS 和BFS 序列。 测试数据:如图所示 题目2:对以邻接表为存储结构的图进行DFS 和BFS 遍历 问题描述:以邻接表为图的存储结构,实现图的DFS 和BFS 遍历。 基本要求:建立一个图的邻接表存贮,输出顶点的一种DFS 和BFS 序列。 测试数据:如图所示 三、附录: 在此贴上调试好的程序。 #include #include #include ????????????????=010******* 010101000100010A

#define M 100 typedef struct node { char vex[M][2]; int edge[M ][ M ]; int n,e; }Graph; int visited[M]; Graph *Create_Graph() { Graph *GA; int i,j,k,w; GA=(Graph*)malloc(sizeof(Graph)); printf ("请输入矩阵的顶点数和边数(用逗号隔开):\n"); scanf("%d,%d",&GA->n,&GA->e); printf ("请输入矩阵顶点信息:\n"); for(i = 0;in;i++) scanf("%s",&(GA->vex[i][0]),&(GA->vex[i][1])); for (i = 0;in;i++) for (j = 0;jn;j++) GA->edge[i][j] = 0; for (k = 0;ke;k++) { printf ("请输入第%d条边的顶点位置(i,j)和权值(用逗号隔开):",k+1); scanf ("%d,%d,%d",&i,&j,&w); GA->edge[i][j] = w; } return(GA); } void dfs(Graph *GA, int v) { int i; printf("%c%c\n",GA->vex[v][0],GA->vex[v][1]); visited[v]=1;

【结构设计】钢筋混凝土结构设计经验数据分享

钢筋混凝土结构设计经验数据分享 1、结构类型如何选择? 解释:(1)对于高度不超过150米的多高层项目一般都选择采用钢筋混凝土结构; (2)对于高度超过150米的高层项目则可能会采用钢结构或混凝土结构类型; (3)对于落后偏远地区的民宅或小工程则可能采用砌体结构类型. 2、结构体系如何选择? 解释:对于钢筋混凝土结构,当房屋高度不超过120米时,一般均为三大常规结构体系——框架结构、剪力墙结构、框架—剪力墙结构. (1)对于学校、办公楼、会所、医院以及商场等需要较大空间的建筑, 当房屋高度不超过下表时,一般选择框架结构; 当房屋高度超过下表时,一般选择框架-剪力墙结构; 抗震设防烈度 6 度 7度 (0.1g) 7度 (0.15g) 8度 (0.2g) 8度 (0.30g) 框架结构 经济适用 高度(m) 3530252015(2)对于高层住宅、公寓、酒店等隔墙位置固定且空间较小的建筑项目一般选择剪力墙结构.当高层住宅、公寓、酒

店项目底部一层或若干层因建筑功能要求(如大厅或商业)需要大空间时,一般采用部分框支剪力墙结构. (3)对于高度大于100米的高层写字楼,一般采用框架-核心筒结构. 3、广州地区某40米高的办公楼采用框架结构体系合理吗? 解释:不合理.7度区框架结构经济适用高度为30米,超过30米较多时应在合适的位置(如楼梯、电梯、辅助用房)布置剪力墙,形成框架-剪力墙结构体系.这样子剪力墙承受大部分水平力,大大减小框架部分受力,从而可以减小框架柱、框架梁的截面和配筋,使得结构整体更加经济合理. 4、框架结构合理柱网及其尺寸? 解释:(1)柱网布置应有规律,一般为正交轴网. (2)普通建筑功能的多层框架结构除个别部位外不宜采用单跨框架,学校、医院等乙类设防建筑以及高层建筑不应采用单跨框架. (3)仅从结构经济性考虑,低烈度区(6度、7度)且风压小(小于0.4)者宜采用用大柱网(9米左右);高烈度区(8度及以上)者宜采用中小柱网(4~6米左右). (4)一般情况下,柱网尺寸不超过12米;当超过12米时可考虑采用钢结构.

数据结构与算法基础习题

数据结构与算法基础 一.判断题: 1.数据元素是数据的最小单位。 2.数据结构是带有结构的数据元素的集合。 3.数据结构、数据元素、数据项在计算机中的映像(或表示)分别称为存储结构、结点、数据域。 4.数据项是数据的基本单位。 5.数据的逻辑结构是指各数据元素之间的逻辑关系,是用户按使用需要而建立的。 6.数据的物理结构是指数据在计算机内实际的存储形式。 7.算法和程序没有区别,所以在数据结构中二者是通用的。 二. 数据结构是研究数据的 A 和 B 以及它们之间的相互关系,并对这种结构定义相应的 C ,设计出相应的 D ,而确保经过这些运算后所得到的新结构是 E 结构类型。 供选择答案: A、B:a理想结构b抽象结构c物理结构d逻辑结构 C、D、E:a运算b算法c结构d规则e现在的f原来的 三.从供选择的答案中选取正确的答案天趣下面叙述中的横线上: 1. A 是描述客观事物的数、字符以及所能输入到计算机中并呗计算机程序加工处理的符号的集合。 2. B 是数据的基本单位,即数据集合中的个体。有时一个 B 由若干个_______组成,在这种情况下,称 B 为记录。 C 是数据的最小单位。而由记录所组成的线性表为 D 。 3. E 是具有相同特性的数据元素的集合,是数据的子集。 4. F是带有结构特性数据元素的集合。 5. 被计算机加工的数据元素不是孤立无关的,它们彼此之间一般存在着某种联系。通常将数据元素的这种关系称为G。 6. 算法的计算量的大小称为计算的H。 供选择的答案: A-F:a数据元素b符号c记录d文件e数据f数据项g数据对象h关键字i数据结构 G:a规则b集合c结构d运算 H:a现实性b难度c复杂性d效率 四.分析一下各程序段,并用大“O”表示执行时间为n(正整数)的函数。 1. i:=1 k:=0; WHILE(i<=n-1) DO BEGIN k:=k+10*i;i:=i+1 END

数据结构实验七图的创建与遍历

实验七图的创建与遍历 实验目的: 通过上机实验进一步掌握图的存储结构及基本操作的实现。 实验内容与要求: 要求: ⑴能根据输入的顶点、边/弧的信息建立图; ⑵实现图中顶点、边/弧的插入、删除; ⑶实现对该图的深度优先遍历; ⑷实现对该图的广度优先遍历。 备注:单号基于邻接矩阵,双号基于邻接表存储结构实现上述操作。算法设计: #include #include #define INFINITY 32767 #define MAX_VEX 20 //最大顶点个数#define QUEUE_SIZE (MAX_VEX+1) //队列长度 using namespace std; bool *visited; //访问标志数组 //图的邻接矩阵存储结构 typedef struct{ char *vexs; //顶点向量 int arcs[MAX_VEX][MAX_VEX]; //邻接矩阵 int vexnum,arcnum; //图的当前顶点数和弧数 }Graph; //队列类 class Queue{ public: void InitQueue() { base=(int *)malloc(QUEUE_SIZE*sizeof(int)); front=rear=0; } void EnQueue(int e) { base[rear]=e; rear=(rear+1)%QUEUE_SIZE; } void DeQueue(int &e) { e=base[front]; front=(front+1)%QUEUE_SIZE; } public: int *base; int front; int rear; }; //图G中查找元素c的位置 int Locate(Graph G,char c) { for(int i=0;i

【结构设计】结构工程师十年设计经验总结

结构工程师十年设计经验总结 1关于箱、筏基础底板挑板的阳角问题: (1)阳角面积在整个基础底面积中所占比例极小,干脆砍了.可砍成直角或斜角. (2)如果底板钢筋双向双排,且在悬挑部分不变,阳角不必加辐射筋,谁见过独立基础加辐射筋的?当然加了也无坏处. (3)如果甲方及老板不是太可恶的话,可将悬挑板的单向板的分布钢筋改为直径12的,别小看这一改,一个工程省个3、2万不成问题. 2关于箱、筏基础底板的挑板问题: 1)从结构角度来讲,如果能出挑板,能调匀边跨底板钢筋,特别是当底板钢筋通长布置时,不会因边跨钢筋而加大整个底板的通长筋,较节约. (2)出挑板后,能降低基底附加应力,当基础形式处在天然地基和其他人工地基的坎上时,加挑板就可能采用天然地基.必要时可加较大跨 度的周圈窗井. (3)能降低整体沉降,当荷载偏心时,在特定部位设挑板,还可调整沉降差和整体倾斜. (4)窗井部位可以认为是挑板上砌墙,不宜再出长挑板.虽然在计算时此处板并不应按挑板计算.当然此问题并不绝对,当有数层地下室,窗井横隔墙较密,且横隔墙能与内部墙体连通时,可灵活考虑.

(5)当地下水位很高,出基础挑板,有利于解决抗浮问题. (6)从建筑角度讲,取消挑板,可方便柔性防水做法.当为多层建筑时,结构也可谦让一下建筑. 3关于箍筋在梁配筋中的比例问题(约10~20%): 例如一8米跨梁,截面为400X600,配筋:上6根25,截断1/3,下5根25,箍筋范围内加密.纵筋总量:385*9*8=281kg,箍筋: 0395*35*50=69,箍筋/纵筋=1/4,如果双肢箍仅为1/8,箍筋相对纵筋来讲所占比例较小,故不必在箍筋上抠门.且不说要强剪弱弯.已经是构造配箍除外. 4关于梁、板的计算跨度: 一般的手册或教科书上所讲的计算跨度,如净跨的11倍等,这些规定和概念仅适用于常规的结构设计,在应用日广的宽扁梁中是不合适的.梁板结构,简单点讲,可认为是在梁的中心线上有一刚性支座,取消梁的概念,将梁板统一认为是一变截面板.在扁梁结构中,梁高比板厚大不了多少时,应将计算长度取至梁中心,选梁中心处的弯距和梁厚,及梁边弯距和板厚配筋,取二者大值配筋.(借用台阶式独立基础变截面处的概念)柱子也可认为是超大截面梁,所以梁配筋时应取柱边弯距.削峰是正常的,不削峰才有问题. 5纵筋搭接长度为若干倍钢筋直径d,一般情况下,d取钢筋直径的较小值,这是有个前提,即大直径钢筋强度并未充分利用.否则应取钢筋直径的较大值.如框架结构顶层的柱子纵筋有时比下层大,d应取较大的钢筋直径,甚至纵筋应向下延伸一层.其实,两根钢筋放一起,用铁丝捆

数据结构 图的遍历(初始化图)

实践四:图及图的应用 1.实验目的要求 理解图的基本概念,两种主要的存储结构。掌握在邻接链表存储结构下的图的深度优先递归遍历、广度优先遍历。通过选做题"最短路径问题"认识图及其算法具有广泛的应用意义。 实验要求:正确调试程序。写出实验报告。 2.实验主要内容 2.1 在邻接矩阵存储结构下的图的深度优先递归遍历、广度优先遍历。 2.1.1 要完成图的两种遍历算法,首先需要进行图的数据初始化。为把时间主要花在遍历算法的实现上,图的初始化采用结构体声明时初始化的方法。示例代码如下: #include "stdio.h" typedef int Arcell; typedef int AdjMatrix[5][5]; typedef struct { char vexs[5]; AdjMatrix arcs; int vexnum,arcnum; }MGraph; void main(){ MGraph g={ {'a','b','c','d','e'}, {{0,1,0,1,0}, {1,0,0,0,1}, {1,0,0,1,0}, {0,1,0,0,1}, {1,0,0,0,0}} ,5,9}; } 2.1.2 深度优先遍历算法7.5中FirstAdjVex方法和NextAdjVex方法需要自己实现。 2.2 拓扑排序,求图的拓扑序列 2.3 "最短路径问题",以校园导游图为实际背景进行设计。(选做) 程序代码如下: #include

#include #define TRUE 1 #define FALSE 0 #define MAX 20 #define NULL 0 #define OK 1 #define OVERFLOW -2 #define ERROR 0 typedef int Status; typedef int Boolean; typedef int QElemType; // 图的邻接矩阵存储结构typedef struct ArcCell{ int adj; }ArcCell, AdjMatrix[20][20]; typedef struct { char vexs[20]; AdjMatrix arcs; int vexnum,arcnum; }Graph; //队列的链式存储结构typedef struct QNode{ QElemType data; struct QNode * next; }QNode, *QueuePtr;

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