数据结构大作业

数据结构大作业
数据结构大作业

课程设计说明书

设计题目:数据结构课程设计

专业:软件工程班级:11级1班

设计人:

山东科技大学

2013 年 1 月 9 日

山东科技大学

课程设计任务书

软件工程专业2011级01 班

一、课程设计题目:数据结构课程设计

二、设计原始资料:数据结构题集(C语言版)

三、设计应解决下列各主要问题:

1、约瑟夫环

2、迷宫问题

3、稀疏矩阵运算器

4、哈夫曼编译\码器

5、哈希表设计

四、设计说明书应附有下列图纸:

五、命题发出日期:2012年10月10日设计应完成日期:2013年1月9日

设计指导教师(签章):

系主任(签章):

指导教师对课程的评语

指导教师(签章):

年月日

实习1 1.2约瑟夫环

实习报告

一、需求分析

1.本演示程序中,编号为1,2,…,n 的n 个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。

2.演示程序以用户和计算机的对话方式执行,即在计算机终端上显示“提示信息”之后,由用户在键盘上输入演示程序中规定的运算命令;相应的输入数据(滤去输入数据中的非法字符)和运算结果显示在其后。

3.程序执行的命令包括:

1)构造单向循环链表 2)判断n 的值是否满足要求 3)依次输入每个人的密码 4)删除节点 5)输出出列顺序 4.测试数据

m 的初值为20;n=7,7个人的密码依次为3,1,7,2,4,8,4,首先m 值为6(正确的出列顺序为6,1,4,7,2,3,5)。

二、概要设计

1.链表的抽象数据类型定义为: ADT Lnode {

数据对象:D={i a |i a }0,,,2,1,S a i ≥?=∈n n i et Elem 数据关系:n}2,...,i D,a |,{R1i ,11=∈><=--i i i a a a

基本操作: IntList(&L)

操作结果:构造一个空的线性链表L 。 DestroyList( &L )

初始条件:线性表 L 已存在。 操作结果:销毁线性表 L 。 ListEmpty( L )

初始条件:线性表L 已存在。

操作结果:若L 为空表,则返回TRUE ,否则FALSE 。 ListLength( L )

初始条件:线性表L 已存在。 操作结果:返回L 中元素个数。 PriorElem( L, cur_e, &pre_e ) 初始条件:线性表L 已存在。

操作结果:若cur_e 是L 的元素,但不是第一个,则用pre_e 返回它的前驱,否则 操作失败,pre_e 无定义。 NextElem( L, cur_e, &next_e ) 初始条件:线性表L 已存在。

操作结果:若cur_e 是L 的元素,但不是最后一个,则用next_e 返回它的后继,否 则操作失败,next_e 无定义。 GetElem( L, i, &e )

初始条件:线性表L 已存在,且 1≤i ≤LengthList(L)。 操作结果:用 e 返回L 中第 i 个元素的值。 LocateElem( L, e, compare( ) )

初始条件:线性表L 已存在,e 为给定值,compare( )是元素判定函数。

操作结果:返回L 中第1个与e 满足关系compare( )的元素的位序。若这样的元素 不存在,则返回值为0。 ListDelete(&L, i, &e)

初始条件:线性表L 已存在且非空,1≤i ≤LengthList(L) 。

操作结果:删除L 的第i 个元素,并用e 返回其值,L 的长度减1。 } ADT List

三、详细设计

1.单向链表的定义:

struct Lnode

{

int number;

int password;//答案

struct Lnode *next;

}Lnode,*p,*q,*head;

2. 建立单链表

for(i=1;i<=n;i++)

{//链表第一个元素设为头结点

if(i==1)

{

head=p=malloc(sizeof(struct Lnode));

}

else

{

q=malloc(sizeof(struct Lnode));//开辟空间

p->next=q;

p=q;

}

3.形成循环链表

p->next=head;

p=head;

4.输出各人的编号

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

{

for(i=1;inext);

m=p->password;

printf("%d ",p->number);

5.删除报m的节点

p->number=p->next->number;

p->password=p->next->password;

q=p->next;

p->next=p->next->next;

6.释放malloc函数申请的动态内存

free(q);

7.主函数的编译

int main()

{int n; /*n个人*/

int i;

int m; /*初始报数上限值*/

int j;

printf("please enter the number of people n:"); /*输入测试人的数量*/

scanf("%d",&n);

if(n<=0||n>30)

{/*检验n是否满足要求,如不满足重新输入n值*/

printf("\n n is erorr!\n\n");

printf("please enter the number of people again n:");

scanf("%d",&n);

}

{

printf("please enter the %d people's password:",i); /*输入每个人所持有的密码值*/

scanf("%d",&(p->password));

p->number=i;

}

}

{ /*形成循环链表*/}

printf("please enter the number m:"); scanf("%d",&m);

printf("The password is:\n");

for (j=1;j<=n;j++) /*输出各人的编号*/

{

for(i=1;inext); m=p->password;

printf("%d ",p->number); { /*删除报m的节点*/}

free(q); }

printf("\n\n"); }

四、附录

#include

#include

struct Lnode /*定义链表*/

{int number;

int password;

struct Lnode *next;

}Lnode,*p,*q,*head;

int main()

{int n; /*n个人*/

int i;

int m; /*初始报数上限值*/

int j;

printf("please enter the number of people n:"); /*输入测试人的数量*/

scanf("%d",&n);

if(n<=0||n>30)

{/*检验n是否满足要求,如不满足重新输入n值*/

printf("\n n is erorr!\n\n");

printf("please enter the number of people again n:");

scanf("%d",&n);

}

{

for(i=1;i<=n;i++)

/* 建立单链表*/

{

if(i==1)

{

head=p=malloc(sizeof(struct Lnode));

}

else

{

q=malloc(sizeof(struct Lnode));

p->next=q;

p=q;

}

printf("please enter the %d people's password:",i); /*输入每个人所持有的密码值*/

scanf("%d",&(p->password));

p->number=i;

}

}

p->next=head;

/*形成循环链表*/

p=head;

printf("please enter the number m:");

scanf("%d",&m);

printf("The password is:\n");

for (j=1;j<=n;j++) /*输出各人的编号*/

{

for(i=1;inext);

m=p->password;

printf("%d ",p->number);

p->number=p->next->number;

/*删除报m的节点*/

p->password=p->next->password;

q=p->next;

p->next=p->next->next;

free(q);

}

printf("\n\n");

}

五、测试结果

实习2 2.9迷宫问题

实习报告

一、需求分析

1、以一个二维数组typedef int MazeType[MAXLENGTH][MAXLENGTH]表示迷宫,其中m[0][j](0≤j≤n+1)和m[i][0](1≦i≦n+1)添加一圈障碍。数组中以元素只为0表示障碍,1表示通路,限定迷宫的最大行列为25。

2、用户以文件的形式输入迷宫的数据,根据屏幕上出现的提示进行输入操作。

3、迷宫的出口和入口可由用户自行设定。

4、程序执行的命令为

①创建迷宫②求解迷宫③输出迷宫的解

二、概要设计

1、栈的类型定义

ADT Stack {

数据对象:

D={ ai|ai ∈ElemSet,i=1,2,...,n,n≥0}

数据关系:

R1={ | ai-1, ai∈D, i=2,...,n }

基本操作:

StackEmpty(S)

初始条件:栈S 已存在。

操作结果:若栈S 为空栈,则返回TRUE,否则FALSE。判定栈是否为空栈是栈在应用程序中经常使用的操作,通常以它作为结束的条件。

StackLength(S)

初始条件:栈S 已存在。

操作结果:返回S 的元素个数,即栈的长度。

GetTop(S, &e)

初始条件:栈S 已存在且非空。

操作结果:用e 返回S 的栈顶元素,并不将它从栈中删除。

ClearStack(&S)

初始条件:栈S 已存在。

操作结果:将S 清为空栈。

Push(&S, e)

初始条件:栈S 已存在。

操作结果:插入元素e 为新的栈顶元素。

StackTraverse(S, visit( ))

初始条件:栈S 已存在且非空,visit( )为元素的访问函数。

操作结果:从栈底到栈顶依次对S每个元素调用函数visit( ),一旦visit( )失败,则操作失败。这是对栈进行从栈底到栈顶的“遍历”操作,应用较多的场合是,输出栈中所有数据元素。} ADT Stack

三、详细设计

1、迷宫坐标位置

struct PosType

{

int x; // 行值

int y; // 列值

};

2、迷宫元素的数据类型

typedef int MazeType[MAXLENGTH][MAXLENGTH];

3、迷宫的探寻函数

void Try(struct PosType cur,int curstep)

4、主函数

int main()

{

struct PosType begin; //起点

int i,j;

printf("请输入迷宫的行数,列数(包括外墙):(空格隔开)");

scanf("%d%d",&x,&y);

for(i=0;i

{

m[0][i]=0; // 迷宫上面行的周边即上边墙

m[x-1][i]=0;// 迷宫下面行的周边即下边墙

}

for(j=1;j

{

m[j][0]=0; // 迷宫左边列的周边即左边墙

m[j][y-1]=0;// 迷宫右边列的周边即右边墙

}

for(i=1;i

{

printf("请输入第%d行的数据,用空格隔开",i);

for(j=1;j

{

scanf("%d",&m[i][j]); //依次录入每个迷宫元素

}

}

printf("请输入迷宫内墙单元数(即墙的个数):");

scanf("%d",&j);

printf("迷宫结构如下:\n");

Print(x,y);

printf("请输入起点的行数,列数:(空格隔开)");

scanf("%d%d",&begin.x,&begin.y);

printf("请输入终点的行数,列数:(空格隔开)");

scanf("%d%d",&end.x,&end.y);

m[begin.x][begin.y]=1;

Try(begin,1); // 由第一步起点试探起

system("pause");

return 0;

}

四、测试结果

五、附录

源代码:

#include

#include

// 迷宫坐标位置类型

struct PosType

{

int x; // 行值

int y; // 列值

};

#define MAXLENGTH 25 // 设迷宫的最大行列为25

typedef int MazeType[MAXLENGTH][MAXLENGTH]; // [行][列] // 全局变量

struct PosType end; // 迷宫终点位置MazeType m; // 迷宫数组

int x, y; // 迷宫行数,列数

// 定义墙元素值为0,可通过路径为-1,通过路径为足迹

// 输出解

void Print(int x,int y)

{

int i,j;

for(i=0;i

{

for(j=0;j

printf("%3d",m[i][j]);

printf("\n");

}

printf("\n");

}

// 由当前位置cur、当前步骤curstep试探下一点

void Try(struct PosType cur,int curstep)

{

int i;

struct PosType next; // 下一个位置

// {行增量,列增量}

struct PosType direc[4]={{0,1},{1,0},{0,-1},{-1,0}};

// 移动方向,依次为东南西北

for(i=1;i<=4;i++) // 依次试探东南西北四个方向

{

next.x=cur.x+direc[i].x;

next.y=cur.y+direc[i].y;

if(m[next.x][next.y] == 1) // 是通路

{

printf("(%d,%d,%d)\n",cur.x,cur.y,i);//i=1向下,i=2向左,i=3向右,i=4向上

m[next.x][next.y]=++curstep;

if(next.x != end.x || next.y != end.y) // 没到终点

Try(next,curstep); // 试探下一点(递归调用)

else

m[next.x][next.y]=1; // 恢复为通路,试探下一条路

curstep--;

}

}

}

// 0为墙,1为通道

int main()

{

struct PosType begin; //起点

int i,j;

printf("请输入迷宫的行数,列数(包括外墙):(空格隔开)");

scanf("%d%d",&x,&y);

for(i=0;i

{

m[0][i]=0; // 迷宫上面行的周边即上边墙

m[x-1][i]=0;// 迷宫下面行的周边即下边墙

}

for(j=1;j

{

m[j][0]=0; // 迷宫左边列的周边即左边墙

m[j][y-1]=0;// 迷宫右边列的周边即右边墙

}

for(i=1;i

{

printf("请输入第%d行的数据,用空格隔开",i);

for(j=1;j

{

scanf("%d",&m[i][j]); //依次录入每个迷宫元素

}

}

printf("请输入迷宫内墙单元数(即墙的个数):");

scanf("%d",&j);

printf("迷宫结构如下:\n");

Print(x,y);

printf("请输入起点的行数,列数:(空格隔开)");

scanf("%d%d",&begin.x,&begin.y);

printf("请输入终点的行数,列数:(空格隔开)");

scanf("%d%d",&end.x,&end.y);

m[begin.x][begin.y]=1;

Try(begin,1); // 由第一步起点试探起

system("pause");

return 0;

}

实习3 4.1稀疏矩阵运算器

实习报告

一、需求分析

1.稀疏矩阵是指那些多数元素为零的矩阵,利用“稀疏”的特点进行存储和计算可以大大

节省存储空间,提高计算效率。而本程序是以“带行逻辑链接信息”的三元顺序表表示稀疏矩阵,实现两个矩阵的相加、相减和相乘的运算。稀疏矩阵的输入形式采用三元组

表示,而运算结果的矩阵则以通常的阵列形式列出。除此之外,程序还采用十字链表表示稀疏矩阵的。 2. 程序的测试数据:

10

000010000090010

81

001030

3????????????+-=????????????---??????

1000

01000901010101323????????????--=????????????---?????? 30043001060420000808000

100010001010000007000

0000??

--???????????????????=???????????????

?

????

二、概要设计

1. 本程序的基本算法设计:

a) 首先输入矩阵的行数和列数,并判断给出的两个矩阵的行、列对于所要求的运算是

否匹配。

b) 对于三元组的输入顺序是按照行优先的限制进行矩阵输入的。 2. 数据结构设计:

typedef struct Node{

int i,j; //非零元素的行和列 double e; //非零元素的值

Node *right; //非零元素行表的后继 Node *down; //非零元素列表的后继 }Node,*NLink; class CList {

private:

NLink *rhead; //行的头指针 NLink *dhead; //列的头指针 int rNum; //行数 int dNum; //列数 public:

CList();

virtual ~CList();

bool InsertNode(int i,int j,double e); bool CreateMatrix(); void ShowMatrix();

bool AddMatrix(CList &Matrix);

bool SubMatrix(CList &Matrix);

bool MultiMatrix(CList &Matrix,CList* &Result); };

三、详细设计

1、稀疏矩阵的三元组顺序表存储表示 typedef struct

{ int i,j; int e;

}Triple;

2、输入创建稀疏矩阵

void CreateSMatrix(RLSMatrix *T)

3、稀疏矩阵相加

void AddRLSMatrix(RLSMatrix M,RLSMatrix N,RLSMatrix *Q) 4、稀疏矩阵相减

void SubRLSMatrix(RLSMatrix M,RLSMatrix N,RLSMatrix *Q) 5、稀疏矩阵相乘

int MulTSMatrix(RLSMatrix M,RLSMatrix N,RLSMatrix *Q) 6、输出稀疏矩阵

void PrintSMatrix(RLSMatrix Q)

7、主函数

void main()

{

RLSMatrix M,N,Q;

int i;

do

{

printf("***************************\n");

printf(" 稀疏矩阵运算器\n");

printf("***************************\ n");

printf(" 1.矩阵相加\n");

printf(" 2.矩阵相减\n");

printf(" 3.矩阵相乘\n");

printf(" 4.退出\n");

printf(" 请选择: ");

scanf("%d",&i);

if(i==4) goto end;

else

{

printf("\n请输入第一个矩阵M:\n");

CreateSMatrix(&M);

printf("\n请输入第二个矩阵N:\n");

CreateSMatrix(&N);

switch(i)

{

case

1:AddRLSMatrix(M,N,&Q);break;

case

2:SubRLSMatrix(M,N,&Q);break;

case

3:MulTSMatrix(M,N,&Q);break;

default:break;

}

}

PrintSMatrix(Q);

getchar();

getchar();

end: ;

}while(i!=4);

}

四、测试结果

五、附录源代码

#include

#include

#define MAXSIZE 100

#define MAXRC 100

typedef struct

{ //稀疏矩阵的三元组顺序表存储表示

int i,j; //该非零元的行下标和列下标

int e;

}Triple;

typedef struct

{

Triple data[MAXSIZE+1]; //非零元三元组表,data[0]未用

int rpos[MAXRC+1]; //各行第一个非零元的位置表

int mu,nu,tu; //矩阵的行数列数和非零元的个数

}RLSMatrix;

void CreateSMatrix(RLSMatrix *T) //输入创建稀疏矩阵

{

int k;

printf(" \n请输入矩阵行数、列数及非零元个数: ");

scanf("%d%d%d",&T->mu,&T->nu,&T->tu);

printf("\n");

if(T->tu>MAXSIZE||T->mu>21)

{

printf("非零个数超出定义范围!出错!");

exit(0);

}

for(k=1;k<=T->tu;k++)

{

printf("请输入第%d个非零元素的行数,列数及其值: ",k);

scanf("%d%d%d",&T->data[k].i,&T->dat a[k].j,&T->data[k].e);

}

}

void AddRLSMatrix(RLSMatrix M,RLSMatrix N,RLSMatrix *Q) //稀疏矩阵相加

{

int p,q,k=1;

if(M.mu!=N.mu||M.nu!=N.nu)

{

printf("你的输入不满足矩阵相加的条件!\n");

exit(1);

}

Q->mu=M.mu;Q->nu=M.nu;

for(p=1,q=1;p<=M.tu&&q<=N.tu;)

{

if(M.data[p].i==N.data[q].i)

{

if(M.data[p].j==N.data[q].j)

{

Q->data[k].i=M.data[p].i;

Q->data[k].j=M.data[p].j;

Q->data[k].e=M.data[p].e+N.data[q].e;

p++;q++;k++;

}

else if(M.data[p].j

{

Q->data[k].i=M.data[p].i;

Q->data[k].j=M.data[p].j;

Q->data[k].e=M.data[p].e;

k++;p++;

}

else if(M.data[p].j>N.data[q].j)

{

Q->data[k].i=N.data[q].i;

Q->data[k].j=N.data[q].j;

Q->data[k].e=N.data[q].e;

k++;p++;

}

}

else if(M.data[p].i

{

Q->data[k].i=M.data[p].i;

Q->data[k].j=M.data[p].j;

Q->data[k].e=M.data[p].e;

k++;p++;

}

else if(M.data[p].i>N.data[q].i)

{

Q->data[k].i=N.data[q].i;

Q->data[k].j=N.data[q].j;

Q->data[k].e=N.data[q].e;

k++;q++;

}

}

if(p!=M.tu+1)

for(;p<=M.tu;p++)

{

Q->data[k].i=M.data[p].i;

Q->data[k].j=M.data[p].j;

Q->data[k].e=M.data[p].e;

k++;

}

if(q!=N.tu+1)

for(;q<=N.tu;q++)

{

Q->data[k].i=N.data[q].i;

Q->data[k].j=N.data[q].j;

Q->data[k].e=N.data[q].e;

k++;

}

}

void SubRLSMatrix(RLSMatrix M,RLSMatrix N,RLSMatrix *Q) //稀疏矩阵相减

{

int p,q,k=1;

if(M.mu!=N.mu||M.nu!=N.nu)

{

printf("你的输入不满足矩阵相减的条件!\n");

exit(1);

}

Q->mu=M.mu;Q->nu=M.nu;

for(p=1,q=1;p<=M.tu&&q<=N.tu;)

{

if(M.data[p].i==N.data[q].i)

{

if(M.data[p].j==N.data[q].j)

{

Q->data[k].i=M.data[p].i;

Q->data[k].j=M.data[p].j;

Q->data[k].e=M.data[p].e-N.data[q].e;

p++;q++;k++;

}

else if(M.data[p].j

{

Q->data[k].i=M.data[p].i;

Q->data[k].j=M.data[p].j;

Q->data[k].e=M.data[p].e;

k++;p++;

}

else if(M.data[p].j>N.data[q].j)

{

Q->data[k].i=N.data[q].i;

Q->data[k].j=N.data[q].j;

Q->data[k].e=-N.data[q].e;

k++;p++;

}

}

else if(M.data[p].i

{

Q->data[k].i=M.data[p].i;

Q->data[k].j=M.data[p].j;

Q->data[k].e=M.data[p].e;

k++;p++;

}

else if(M.data[p].i>N.data[q].i)

{

Q->data[k].i=N.data[q].i;

Q->data[k].j=N.data[q].j;

Q->data[k].e=-N.data[q].e;

k++;q++;

}

}

if(p!=M.tu+1)

for(;p<=M.tu;p++)

{

Q->data[k].i=M.data[p].i;

Q->data[k].j=M.data[p].j;

Q->data[k].e=M.data[p].e;

k++;

}

if(q!=N.tu+1)

for(;q<=N.tu;q++)

{

Q->data[k].i=N.data[q].i;

Q->data[k].j=N.data[q].j;

Q->data[k].e=-N.data[q].e;

k++;

}

}

int MulTSMatrix(RLSMatrix M,RLSMatrix N,RLSMatrix *Q) //稀疏矩阵相乘

{

int ccol=0,tp,brow,t,arow,p,q,i;

int ctemp[MAXSIZE+1];

if(M.nu!=N.mu)

{

printf("你的输入不满足矩阵相乘的条件!\n");

return 0;

}

Q->mu=M.mu;

Q->nu=N.nu;

Q->tu=0;

if(M.tu*N.tu!=0)

{

for(arow=1;arow<=M.mu;++arow)

{

for(i=1;i<=N.nu;i++)

ctemp[i]=0;

Q->rpos[arow]=Q->tu+1;

if(arow

tp=M.rpos[arow+1];

else tp=M.tu+1;

for(p=M.rpos[arow];p

{

brow=M.data[p].j;

if(brow

t=N.rpos[brow+1];

else t=N.tu+1;

for(q=N.rpos[brow];q

{

ccol=N.data[q].j;

ctemp[ccol]+=M.data[p].e*N.data[q].e;

}

}

for(ccol=1;ccol<=Q->nu;++ccol)

{

if(ctemp[ccol])

{

if(++Q->tu>MAXSIZE) return 0;

Q->data[Q->tu].i=arow;

Q->data[Q->tu].j=ccol;

Q->data[Q->tu].e=ctemp[ccol];

}

}

}

}

return 1;

}

void PrintSMatrix(RLSMatrix Q) //输出稀疏矩阵

{

int k=1,row,line;

printf("\n运算结果: ");

if(Q.tu==0) printf("0\t");

else

{

for(row=1;row<=Q.mu;row++)

{

for(line=1;line<=Q.nu;line++)

{

if(Q.data[k].i==row&&Q.data[k].j==line )printf("%d\t",Q.data[k++].e);

else printf("0\t");

}

printf("\n\t ");

}

}

}

void main()

{

RLSMatrix M,N,Q;

int i;

do

{

printf("***************************\n");

printf(" 稀疏矩阵运算器\n");

printf("***************************\ n");

printf(" 1.矩阵相加\n");

printf(" 2.矩阵相减\n");

printf(" 3.矩阵相乘\n");

printf(" 4.退出\n");

printf(" 请选择: ");

scanf("%d",&i);

if(i==4) goto end;

else

{

printf("\n请输入第一个矩阵M:\n");

CreateSMatrix(&M);

printf("\n请输入第二个矩阵N:\n");

CreateSMatrix(&N);

switch(i)

{

case

1:AddRLSMatrix(M,N,&Q);break;

case

2:SubRLSMatrix(M,N,&Q);break;

case

3:MulTSMatrix(M,N,&Q);break;

default:break;

}

}

PrintSMatrix(Q);

getchar();

getchar();

end: ;

}while(i!=4);

}

实习4 5.2哈夫曼编译\码器

实习报告

一、需求分析

1、程序的基本功能

本程序可以对任何大小的字符型文件进行Huffman 编码,生成一个编码文件。并可以在程序运行结束后的任意时间对它解码还原生成字符文件。即:先对一条电文进行输入,并实现Huffman 编码,然后对Huffman 编码生成的代码串进行译码,最后输出电文数字。 2、输入/输出形式

当进行编码时输入为原字符文件文件名,当程序运行编码完成之后输入编码文件名(默认名为code.dll )。当进行译码时输入为编码文件名(默认名为code.dll ),从文件中读取Huffman 编码树后输入字符文件的文件名。

二、概要设计

三、详细设计

1、哈夫曼树 struct HafNode{ int weight; int parent; char ch; int lchild; int rchild;

}*myHaffTree; 2、构造哈弗曼树 void Haffman(int n) 3、对字符进行编码 void Caozuo_C(int m) 4、主函数 void main() { int n; char char1; print(); n=Init(); while(1)

{

printf("A.coding B.codeprinting C.print the huffman D.exit\nplease input

the process:\n");

scanf("%s",&char1);

if(char1=='D')

break; switch(char1) { case'A':Caozuo_C(n);break;/* 执行编码操作 */ case'B':Caozuo_D(n);break;/* 执行译码操作 */

case'C':Caozuo_T(n);break;/* 打印哈弗曼树 */ } } } 四、测试结果

哈弗曼树编码译码器

编码

译码

退出

五、附录源代码

#include

#include

#include

#define MAX 100

struct HafNode

{

int weight;

int parent;

char ch;

int lchild;

int rchild;

}*myHaffTree;

struct Coding

{

char bit[MAX];

char ch;

int weight;

}*myHaffCode;

void Haffman(int n)/* 构造哈弗曼树*/ {

int i,j,x1,x2,s1,s2;

for (i=n+1;i<=2*n-1;i++)

{

s1=s2=10000;

x1=x2=0;

for (j=1;j<=i-1;j++)

{

if(myHaffTree[j].parent==0&&myHaffTr ee[j].weight

{

s2=s1;

x2=x1;

s1=myHaffTree[j].weight;

x1=j;

}

else

if(myHaffTree[j].parent==0&&myHaffTree[j] .weight

{

s2=myHaffTree[j].weight;

x2=j;

}

}

myHaffTree[x1].parent=i;

myHaffTree[x2].parent=i;

myHaffTree[i].weight=s1+s2;

myHaffTree[i].lchild=x1;

myHaffTree[i].rchild=x2;

}

}

void HaffmanCode(int n)

{

int start,c,f,i,j,k;

char *cd;

cd=(char *)malloc(n*sizeof(char));

myHaffCode=(struct Coding *)malloc((n+1)*sizeof(struct Coding));

cd[n-1]='\0';

for(i=1;i<=n;++i)

{

start=n-1;

for(c=i,f=myHaffTree[i].parent;f!=0;c=f,f =myHaffTree[f].parent)

if(myHaffTree[f].lchild==c)

cd[--start]='0';

else cd[--start]='1';

for(j=start,k=0;j

{

myHaffCode[i].bit[k]=cd[j];

k++;

}

myHaffCode[i].ch=myHaffTree[i].ch;

myHaffCode[i].weight=myHaffTree[i].w eight;

}

free(cd);

}

void print()

{

printf("*************************** ************************************* ***************\n");

printf("***** *****\n");

printf("***** *****\n");

printf("***** welcome to huffman coding and codeprinting *****\n");

printf("***** *****\n");

printf("***** *****\n");

printf("*****1.init 2.coding 3.codeprinting 4.print the huffman 5.exit *****\n");

printf("***** *****\n");

printf("*************************** ************************************* ***************\n");

}

Init()

{

int i,n,m;

printf("now init\n");

printf("please input the number of words:\n");

scanf("%d",&n);

m=2*n-1;

myHaffTree=(struct HafNode

*)malloc(sizeof(struct HafNode)*(m+1));

for(i=1;i<=n;i++)

{

printf("please input the word and the equal:\n");

scanf("%s%d",&myHaffTree[i].ch,&my HaffTree[i].weight);

myHaffTree[i].parent=0;

myHaffTree[i].lchild=0;

myHaffTree[i].rchild=0;

}

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

{

myHaffTree[i].ch ='#';

myHaffTree[i].lchild=0;

myHaffTree[i].parent=0;

myHaffTree[i].rchild=0;

myHaffTree[i].weight=0;

}

Haffman(n);

HaffmanCode(n);

for(i=1;i<=n;i++)

{

printf("%c %d",myHaffCode[i].ch,myHa ffCode[i].weight);

printf("\n");

}

printf("init success!\n");

return n;

}

void Caozuo_C(int m)/* 对字符进行编码*/ {

int n,i,j;

char string[50],*p;

printf("please input the words:\n");

scanf("%s",string);

n=strlen(string);

for(i=1,p=string;i<=n;i++,p++)

{

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

if(myHaffCode[j].ch==*p) printf("%s\n",myHaffCode[j].bit);

}

}

void Caozuo_D(int n)

{

int c;

char code[1000],*p;

printf("please input the coding:\n");

scanf("%s",code);

for(p=code,c=2*n-1;*p!='\0';p++)

{

if(*p=='0')

{

c=myHaffTree[c].lchild;

if(myHaffTree[c].lchild==0)

{

printf("%c",myHaffTree[c].ch);

c=2*n-1;

continue;

}

}

else if(*p=='1')

{

c=myHaffTree[c].rchild;

if(myHaffTree[c].lchild==0)

{

printf("%c",myHaffTree[c].ch);

c=2*n-1;

continue;

}

}

}

printf("\n");

}

void Caozuo_T(int n)

{

int i;

printf("word equal leftchild rightchild prents\n");

for(i=1;i<=2*n-1;i++)

printf("%c %d %d %d %d\n",myHaffTre e[i].ch,myHaffTree[i].weight,myHaffTree[i].lc hild,myHaffTree[i].rchild,myHaffTree[i].pare nt);

}

void main()

{

int n;

char char1;

print();

n=Init();

while(1)

{

printf("A.coding B.codeprinting C.print the huffman D.exit\nplease input the process:\n");

scanf("%s",&char1);

if(char1=='D')

break;

switch(char1)

{

case'A':Caozuo_C(n);break;/* 执行编码操作*/

case'B':Caozuo_D(n);break;/* 执行译码操作*/

case'C':Caozuo_T(n);break;/* 打印哈弗曼树*/

}

}

实习5 6.2哈希表设计

实习报告

一、需求分析

1、设每个记录有下列数据项:电话号码、用户名、地址;

2、从键盘输入各记录,分别以电话号码和用户名为关键字建立哈希表;

3、采用再哈希法解决冲突;

4、查找并显示给定电话号码的记录;

5、查找并显示给定用户的记录。

6、在哈希函数确定的前提下,尝试各种不同类型冲突吃力方法(至少两种),考察平均查找长度

二、概要设计

1、数据结构选择

本设计涉及到的数据结构为:哈希表。要求输入电话号码、用户名、地址三个信息,并要求分别以电话号码和用户名为关键字进行查找,所以本问题要用到两个哈希函数,进行哈希查找。

在链地址法中,每个结点对应一个链表结点,它由三个域组成,而由于该程序需要分别用电话号码和用户名为关键字建立哈希表,所以该链表结点它是由四个域组成,链接地址法结点结构如图:

name[8] num[11] address[20] next

其中name[8]和num[11]是分别为以电话号码和用户名为关键字域,存放关键字(key);address[20](data)为结点的数据域,用来存储用户的地址。Next指针是用来指向下一个结点的地址。

三、详细设计

1、建立节点

struct node

{

char name[8],address[20];

char num[11];

node * next;

};

typedef node* pnode; //可以为一个已有的数据类型声明多个别名,这里为该类型声明了两个指针

typedef node* mingzi;

node **phone;

node **nam;

node *a;

2、哈希函数的定义

本程序要设计两个hash()函数,分别对应电话号码和用户名。对关键字进行模运算,将运算结果所得的余数作为关键字(或结点)的存储地址,方法如下:以电话号码为关键字建立哈希函数hash(char num[11])。以用户名为关键字建立哈希函数hash2(char name[8])。利用强制类型转换,将用户名的每一个字母的ASCLL码值相加并且除以20后的余数。将计算出来的数作为该结点的地址赋给key2。

void hash(char num[11]); //以电话号码为关键字建立哈希函数

//哈希函数的主旨是将电话号码的十一位数字全部加起来

{

int i = 3;

key=(int)num[2];

while(num[i]!=NULL)

{

四川大学《结构设计原理1643》在线作业答案

川大15秋《结构设计原理1643》在线作业答案 一、单选题: 1.题面如下: (满分:2) A. a B. b C. c D. d 2.预应力混凝土构件,当采用钢绞线、钢丝、热处理钢筋做预应力钢筋时,混凝土强度等级不宜低于( )。 (满分:2) A. C25 B. C30 C. C40 D. C45 3.适筋梁在逐渐加载过程中,当受拉钢筋刚刚屈服后,则( )。 (满分:2) A. 该梁达到最大承载力而立即破坏 B. 该梁达到最大承载力,一直维持到受压区边缘混凝土达到极限压应变而破坏 C. 该梁达到最大承载力,随后承载力缓慢下降,直至破坏 D. 该梁承载力略有增加,待受压区边缘混凝土达到极限压应变而破坏 4.题面如下: (满分:2) A. a B. b C. c D. d 5.提高截面刚度的最有效措施是( )。 (满分:2) A. 提高混凝土强度等级 B. 增大构件截面高度 C. 增加钢筋配筋量 D. 改变截面形状 6.钢筋混凝土大偏压构件的破坏特征是( )。 (满分:2) A. 远离纵向力作用一侧的钢筋拉屈,随后另一侧钢筋压屈,混凝土亦压碎 B. 靠近纵向力作用一侧的钢筋拉屈,随后另一侧钢筋压屈,混凝土亦压碎 C. 靠近纵向力作用一侧的钢筋和混凝土应力不定,而另一侧受拉钢筋拉屈 D. 远离纵向力作用一侧的钢筋和混凝土应力不定,而另一侧受拉钢筋拉屈 7.热轧钢筋冷拉后,( )。 (满分:2) A. 可提高抗拉强度和抗压强度 B. 只能提高抗拉强度 C. 可提高塑性,强度提高不多 D. 只能提高抗压强度 8.题面如下: (满分:2) A. a B. b C. c D. d

数据结构大作业含源代码

数据结构大作业 作业题目:职工信息管理系统 姓名: 学号: 班级: 指导教师: 日期:

一、主要功能: 这个职工信息管理系统是由C语言编写的程序,它用起来很方便又很灵活。它由输入职工信息,输出职工信息,按职工号,部门号,工资排序,按职工号,部门号,工资来输出职工的所有信息。删除有关职工的所有信息,保存职工的所有信息并退出等11个模块儿组成。 二、实验环境:C语言、C++、C# 等等。 三、功能说明: 下面按步骤来介绍一下,职工信息管理系统的基本操作。 这是运行程序以后出现的主界面。如图(1)所示: 图(1)主界面 1.输入职工的信息 该模块儿的功能是分别输入职工的姓名,职工号,部门号,工资等信息。每次输入职工的所有信息以后,界面上会显示出《输入完成!》的命令。如图(2)所示:

图(2)输入职工信息 2.输出所有的职工信息 该模块儿的功能是显示出有关职工的所有信息。操作如图(3)所示: 图(3)输出所有的职工信息 3.按职工号排序 该模块儿的功能是按职工号排序所有的职工。我们按3的时候,界面上会显示出《排序完成!》的命令。如图(4)所示:

图(4)按职工号排序 4.输出所有的职工号码 该模块儿的功能是显示出已排序好的所有职工的号码。操作如图(5)所示: 图(5)输出所有的职工号 5.按部门号排序 该模块儿的功能是按部门号排序所有职工的部门号。我们按5的时候,界面上会显示出《排序完成!》的命令。如图(6)所示:

图(6)按部门号排序 6.输出所有的部门号 该模块儿的功能是显示出已排序好的所有部门号。操作如图(7)所示: 图(7)输出所有的部门号 7.按职工的工资排序 该模块儿的功能是按工资排序所有职工的工资。我们按7的时候,界面上会显示出《排序完成!》的命令。如图(8)所示:

数据结构大作业

浙江大学城市学院实验报告 课程名称数据结构基础 实验项目名称实验九栈的应用 学生姓名丁汀专业班级信管1006 学号31001444 实验成绩指导老师(签名)日期 一.实验目的和要求 1、学会通过对问题的分析,设计一种合理的数据结构,并进行定义及操作的实现。 2、掌握利用栈各种操作来进行具体的实际应用。 3、加强综合程序的分析、设计能力。 二.实验内容 1、共享栈的设置,问题描述如下: 在一个数组空间stack[MaxSize]中可以同时存放两个顺序栈,栈底分别处在数组的两端,当第1个栈的栈顶指针top1等于-1时则栈1为空,当第2个栈的栈顶指针top2等于MaxSize时则栈2为空。两个栈均向中间增长,当有元素向栈1进栈时,使top1增1得到新的栈顶位置,当有元素向栈2进栈时,使top2减1得到新的栈顶位置。当top1==top2-1或top1+1==top2时,存储空间用完,无法再向任一栈做进栈操作,此时可考虑给出错误信息并停止运行。 要求: ⑴给出共享栈的顺序存储类型定义。 ⑵给出共享栈的抽象数据类型定义。 ⑶建立头文件test9_stack.h,包含共享栈的基本操作实现函数;建立主程序文件test9.cpp,在主函数中对共享栈的各个操作进行测试。 2、利用上述共享栈,实现火车车厢的调度模拟 设火车车厢分为三类:硬座、硬卧、软卧,分别用A、B、C表示。下图描述车厢调度的示意图,图中右端为排列无序的车厢,左端为调度后的车厢排列,使得所有软卧车厢在最前面、所有硬卧车厢在中间、所有硬座车厢在最后。 编程模拟上述车厢调度过程。 提示:两个辅助铁轨相当于两个栈,右端车厢进入用相应字符串给出,如“BBACBCAABBCAA”,左端车厢的用新生成的字符串给出。在test9_stack.h 给出模拟函数,并在主函数中进行调用测试。

四川大学网络教育学院《结构设计原理》第二次作业答案

四川大学网络教育学院《结构设计原理》第二次作业答案 你的得分: 90.0 完成日期:2014年09月09日 16点03分 说明:每道小题括号里的答案是您最高分那次所选的答案,标准答案将在本次作业结束(即2014年09月11日)后显示在题目旁边。 一、单项选择题。本大题共25个小题,每小题 2.0 分,共50.0分。在每小题给出的选项中,只有一项是符合题目要求的。 1. ( D ) A. a B. b C. c D. d 2.下列说法正确的是()。 ( D ) A.加载速度越快,则得的混凝土立方体抗压强度越低 B.棱柱体试件的高宽比越大,测得的抗压强度越高 C.混凝土立方体试件比棱柱体试件能更好地反映混凝土的实际受压 情况 D.混凝土试件与压力机垫板间的摩擦力使得混凝土的抗压强度提高 3. ( B ) A. a B. b C. c D. d 4.在保持不变的长期荷载作用下,钢筋混凝土轴心受压构件中,()。 ( C )

A.徐变使混凝土压应力减小 B.混凝土及钢筋的压应力均不变 C.徐变使混凝土压应力减小,钢筋压应力增大 D.徐变使混凝土压应力增大,钢筋压应力减小 5.适筋梁在逐渐加载过程中,当受拉钢筋刚刚屈服后,则()。 ( D ) A.该梁达到最大承载力而立即破坏 B.该梁达到最大承载力,一直维持到受压区边缘混凝土达到极限压应 变而破坏 C.该梁达到最大承载力,随后承载力缓慢下降,直至破坏 D.该梁承载力略有增加,待受压区边缘混凝土达到极限压应变而破坏 6. ( B ) A. a B. b C. c D. d 7.提高受弯构件正截面受弯能力最有效的方法是()。 ( C ) A.提高混凝土强度等级 B.增加保护层厚度 C.增加截面高度 D.增加截面宽度 8.在T形截面梁的正截面承载力计算中,假定在受压区翼缘计算宽度b′ f 内,()。 ( A ) A.压应力均匀分布 B.压应力按抛物线型分布

数据结构大作业报告

数据结构大作业报告 数据结构大作业实验报告课程名称:数据结构设计题目:客户去银行储蓄模拟程序一( 实验题目 (1)内容描述:编写一个程序反映客户到银行储蓄的过程。 (2)基本要求:要实现以下功能:1:排队 2:储蓄 3:查看排队4.:删除自己所排的队 5.不再排队,剩下的客户依次储蓄 6:下班 二( 实验的工程组成图和程序结构图 main bank 本工程的组成结构如左图所示,程序结构图如右图所示。三( 工程所包含的函数的功能描述 Bank():模拟客户到银行去储蓄的过程。客户排队储蓄,所以要用到一个队列, 这里设计了一个不带头结点的单链表作为队列。 四( 实验工程的算法描述及流程图 //客户排队去银行储蓄,用到了队列的知识,这里设计了一个不带头结点的单链表作为队列来完成排队储蓄过程 #include

#include typedef struct qnode { int data; struct qnode *next; } QNode; //定义链队结点类型 typedef struct { QNode *front,*rear; } QType; //定义链队类型 void bank() //模拟客户储蓄的过程 { int cho,onwork=1,no,find; QType *q; //定义链队类型的指针 QNode *p,*r; //定义链队结点的指针 q=(QType *)malloc(sizeof(QType)); //申请链队的空间 q->front=q->rear=NULL; //创建空队 while (onwork==1) //循环执行 { printf("1:排队 2:储蓄 3:查看排队4:删除自己所排的队 5:不再排队,剩下的客户依次储蓄 6:下班请选择:"); scanf("%d",&cho); switch(cho) { case 1://排队

新编机械结构设计大作业

《结构设计》课程大作业 、课程大作业的目的: 1、课程大作业属于机械专业设计类课程的延续,是机械系统设计的一次全面训练,可以为毕业设计打下良好基础。通过课程大作业,进一步学习掌握机械系统设计的一般方法,培养学生综合运用机械制图、机械设计、机械原理、公差与配合、金属工艺学、材料热处理及结构工艺等相关知识,联系实际并运用所学过的知识,提高进行工程设计的能力。 2、加强学生运用有关设计资料、设计手册、标准、规范及经验数据的能力,提高技术总结及编制技术文件的能力,培养和提高学生独立的分析问题、解决问题的能力,也是毕业设计教学环节实施的前期技术准备。 二、课程大作业的基本要求: 1 、分组与选题: ①自由组合,每组原则上三人(最少2人);每组的同学统一提交、共同答辩。 ②具体课题题目(由指导教师给出),同组同学集体研讨后完成。 2、大作业的基本要求: ①大作业的论述必须合理; ②大作业中的内容要注明出处,注明资料来源(参考文献及资料); ③总的文字(含图、表)不少于2万字,使用标准A4纸打印成稿(文字选用宋体小四号,页边距均为2cm,单倍行距),封面需要注明课题详细名称、参加学生姓名、班级学号、指导教师等。 三、课程大作业题目及其要点 举例说明在下列的机械结构设计中,如何提高机械结构性能的途径或措施有那些?(围绕题目和要点) 机自082-28吴铁健、-29张明、-14张钦亮:

(1)便于退刀准则 (2)最小加工量准则 (3)可靠夹紧准则 (4)一次夹紧成形准则 (5)便利切削准则 (6)减少缺口效应准则 (7)避免斜面开孔准则 (8)贯通空优先准则 (9)孔周边条件相近准则 机自083 -06焦文、-36张浩然、-14 丁世洋: (一)提高强度和刚度的结构设计 1、载荷分担 2、载荷均布 3、减少机器零件的应力集中 4、利用设置肋板的措施提高刚度 (二)提高耐磨性的结构设计

数据结构大作业要求

数据结构实验讲义 一实验步骤 随之计算机性能的提高,它所面临的软件开发的复杂度也日趋增加。然而,编制一个10,000行的程序的难度绝不仅仅是一个5,000行的程序两倍,因此软件开发需要系统的方法。一种常用的软件开发方法,是将软件开发过程划分为分析、设计、实现和维护四个阶段。虽然数据结构课程中的实习题的复杂度远不如(从实际问题中提出来的)一个“真正的,,软件,但为了培养一个软件工作者所应具备的科学工作的方法和作风,我们制订了如下所述完成实习的五个步骤:’ (一)问题分析和任务定义 通常,实习题目的陈述比较简洁,或者说是有模棱两可的含义。因此,在进行设计之前,首先应该充分地分析和理解问题,明确问题要求做什么?限制条件是什么。注意:本步骤强调的是做什么?而不是怎么做。对问题的描述应避开算法和所涉及的数据类型,而是对所需完成的任务作出明确的回答。例如:输入数据的类型、值的范围以及输入的形式;输出数据的类型、值的范围及输出的形式;若是会话式的输入,则结束标志是什么?是否接受非法的输入?对非法输入的回答方式是什么等。这一步还应该为调试程序准备好测试数据,包括合法的输入数据和非法形式的输入数据。 (二)数据类型和系统设计 在设计这一步骤中需分逻辑设计和详细设计两步实现。逻辑设计指的是,对问题描述中涉及的操作对象定义相应的数据类型,并按照以数据结构为中心的原则划分模块,定义主程序模块和各抽象数据类型;详细设计则为定义相应的存储结构并写出各函数的伪码算法。在这个过程中,要综合考虑系统功能,使得系统结构清晰、合理、简单和易于调试,抽象数据类型的实现尽可能做到数据封装,基本操作的规格说明尽可能明确具体。作为逻辑设计的结果,应写出每个抽象数据类型的定义(包括数据结构的描述和每个基本操作的规格说明),各个主要模块的算法,并画出模块之间的调用关系图。详细设计的结果是对数据结构和基本操作的规格说明作出进一步的求精,写出数据存储结构的类型定义,按照算法书写规范用类c语言写出函数形式的算法框架。在求精的过程中,应尽量避免陷入语言细节,不必过早表述辅助数据结构和局部变量。 (三)编码实现和静态检查 编码是把详细设计的结果进一步求精为程序设计语言程序。程序的每行不要超过60个字符。每个函数体,即不计首部和规格说明部分,一般不要超过40行,最长不得超过60行,否则应该分割成较小的函数。要控制if语句连续嵌套的深度。其他要求参见第一篇的

结构设计原理第一次作业答案

首页-我的作业列表-《结构设计原理》第一次作业答案 欢迎你,刘晓星(DI4131R6009 '你的得分:100.0 完成日期:2014年07月02日10点04分 一、单项选择题。本大题共25个小题,每小题2.0 分,共50.0分。在每小题给出的选项中,只有一 项是符合题目要求的。 若用S表示结构或构件截面上的荷载效应,用R表示结构或构件截面的抗力,结构或构件截面处于极限状态时,对应于()式。 (B ) R> S R= S R v S R WS 对所有钢筋混凝土结构构件都应进行()。 (D ) 抗裂度验算 裂缝宽度验算 变形验算 承载能力计算混凝土各项强度指标的基本代表值是()。 (B ) 轴心抗压强度标准值立方体抗压强度标准值 轴心抗压强度平均值立方体抗压强度平均值 工程结构的可靠指标3与失效概率P f之间存在下列()关系。 (D ) 3愈大,P f愈大 3与P f呈反比关系 3与P f呈正比关系 3与P f存在一一对应关系,3 愈大,P f愈小

(B ) a b c d 热轧钢筋冷拉后,()。 (A ) 可提高抗拉强度和抗压强度只能提高抗拉强度 可提高塑性,强度提高不多 只能提高抗压强度 无明显流幅钢筋的强度设计值是按()确定的。 (C ) 材料强度标准值x材料分布系数 材料强度标准值/材料分项系数 0.85 x材料强度标准值/材料分项系数 材料强度标准值/ (0.85 x材料分项系数) 钢筋混凝土梁的受拉区边缘混凝土达到下述哪一种情况时,开始出现裂缝?( ) (A ) 达到混凝土实际的轴心抗拉强度 达到混凝土轴心抗拉强度标准值 达到混凝土轴心抗拉强度设计值 达到混凝土弯曲受拉时的极限拉应变值 (D ) a b c d

家谱管理系统 -数据结构大作业

/* 家谱管理系统 任务:实现具有下列功能的家谱管理系统 功能要求: 1). 输入文件以存放最初家谱中各成员的信息,成员的信息中均应包含以下内容: 姓名、出生日期、婚否、地址、健在否、死亡日期(若其已死亡),也可附加其它信息、但不是必需的。 2). 实现数据的存盘和读盘。 3). 以图形方式显示家谱。 4). 显示第n 代所有人的信息。 5). 按照姓名查询,输出成员信息(包括其本人、父亲、孩子的信息)。 6). 按照出生日期查询成员名单。 7). 输入两人姓名,确定其关系。 8). 某成员添加孩子。 9). 删除某成员(若其还有后代,则一并删除)。 10).修改某成员信息。 11).按出生日期对家谱中所有人排序。 12).打开一家谱时,提示当天生日的健在成员。 要求:建立至少30个成员的数据,以较为直观的方式显示结果,并提供文稿形式以便检查。界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。存储结构:学生自己根据系统功能要求自己设计,但是要求相关数据要存储在数据文件中。测试数据:要求使用1、全部合法数据;2、局部非法数据。进行程序测试,以保证程序的稳定。 测试数据及测试结果请在上交的资料中写明; */ #include #include #include #include #include"map.h" #define MAXN 100 #define MAXMEM 100 #define Elemtype char ============================== //树 typedef struct BiTNode { int mark;//标记 int level; char name[50];//姓名 char birthday[50];//生日

大数据结构大作业报告材料

数据结构课程设计课题名称 专业名称 学生姓名 学号+电话 指导教师

评分细则

目录 评分细则----------------------------------------------------------------------------------------------------------------- 2 一、课题描述 ---------------------------------------------------------------------------------------------------------- 4 二、需求分析 ---------------------------------------------------------------------------------------------------------- 4 2.1 ------------------------------------------------------------------------------------------------------------------ 4 2.2- ------------------------------------------------------------------------------------------------------------------4 2.3--------------------------------------------------------------------------------------------------------------------4 三、概要设计 ---------------------------------------------------------------------------------------------------------- 4 3.1 结构分析 ----------------------------------------------------------------------------------------------------------- 4 3.2函数------------------------------------------------------------------------------------------------------------ 4 3.2.1 malloc() --------------------------------------------------------------------------------------------- 4 3.2.2getchar() ----------------------------------------------------------------------------------------------------- 5 3.2.3 list_create() ------------------------------------------------------------------------------------------------ 5 3.2.4 list_disp() --------------------------------------------------------------------------------------------------- 5 3.2.5 list_sort() --------------------------------------------------------------------------------------------------- 5 四、详细设计 ---------------------------------------------------------------------------------------------------------- 5 4.1课题分析 ----------------------------------------------------------------------------------------------------- 5 4.1.1选择 ------------------------------------------------------------------------------------------------- 5 4.1.2冒泡 --------------------------------------------------------------------------------------------------------- 5 4.1.3 堆------------------------------------------------------------------------------------------------------------ 6 4.1.4 快速--------------------------------------------------------------------------------------------------------- 6 4.1.5 基数--------------------------------------------------------------------------------------------------6 4.1.6 希尔--------------------------------------------------------------------------------------------------------- 6 4.1.7 归并--------------------------------------------------------------------------------------------------6 4.2课题实现 ----------------------------------------------------------------------------------------------------- 7 五、测试数据及结果------------------------------------------------------------------------------------------------- 9 六、调试分析及总结----------------------------------------------------------------------------------------------- 10

结构优化设计大作业(北航)

《结构优化设计》 大作业报告 实验名称: 拓扑优化计算与分析 1、引言 大型的复杂结构诸如飞机、汽车中的复杂部件及桥梁等大型工程的设计问题,依靠传统的经验和模拟实验的优化设计方法已难以胜任,拓扑优化方法成为解决该问题的关键手段。近年来拓扑优化的研究的热点集中在其工程应用上,如: 用拓扑优化方法进行微型柔性机构的设计,车门设计,飞机加强框设计,机翼前缘肋设计,卫星结构设计等。在其具体的操作实现上有两种方法,一是采用计算机语言编程计算,该方法的优点是能最大限度的控制优化过程,改善优化过程中出现的诸如棋盘格现象等数值不稳定现象,得到较理想的优化结果,其缺点是计算规模过于庞大,计算效率太低;二是借助于商用有限元软件平台。本文基于matlab软件编程研究了不同边界条件平面薄板结构的在各种受力情况下拓扑优化,给出了几种典型结构的算例,并探讨了在实际优化中优化效果随各参数的变化,有助于初学者初涉拓扑优化的读者对拓扑优化有个基础的认识。

2、拓扑优化研究现状 结构拓扑优化是近20年来从结构优化研究中派生出来的新分支,它在计算结构力学中已经被认为是最富挑战性的一类研究工作。目前有关结构拓扑优化的工程应用研究还很不成熟,在国外处在发展的初期,尤其在国内尚属于起步阶段。1904 年Michell在桁架理论中首次提出了拓扑优化的概念。自1964 年Dorn等人提出基结构法,将数值方法引入拓扑优化领域,拓扑优化研究开始活跃。20 世纪80 年代初,程耿东和N. Olhoff在弹性板的最优厚度分布研究中首次将最优拓扑问题转化为尺寸优化问题,他们开创性的工作引起了众多学者的研究兴趣。1988年Bendsoe和Kikuchi发表的基于均匀化理论的结构拓扑优化设计,开创了连续体结构拓扑优化设计研究的新局面。1993年Xie.Y.M和Steven.G.P 提出了渐进结构优化法。1999年Bendsoe和Sigmund证实了变密度法物理意义的存在性。2002 年罗鹰等提出三角网格进化法,该方法在优化过程中实现了退化和进化的统一,提高了优化效率。目前常使用的拓扑优化设计方法可以分为两大类:退化法和进化法。结构拓扑优化设计研究,已被广泛应用于建筑、航天航空、机械、海洋工程、生物医学及船舶制造等领域。 3、拓扑优化建模(SIMP) 结构拓扑优化目前的主要研究对象是连续体结构。优化的基本方法是将设计区域划分为有限单元,依据一定的算法删除部分区域,形成带孔的连续体,实现连续体的拓扑优化。连续体结构拓扑优化方法目前比较成熟的是均匀化方法、变密度方法和渐进结构优化方法。 变密度法以连续变量的密度函数形式显式地表达单元相对密度与材料弹性模量之间的对应关系,这种方法基于各向同性材料,不需要引入微结构和附加的均匀化过程,它以每个单元的相对密度作为设计变量,人为假定相对密度和材料弹性模量之间的某种对应关系,程序实现简单,计算效率高。变密度法中常用的插值模型主要有:固体各向同性惩罚微结构模型(solidisotropic microstructures with penalization,简称SIMP)和材料属性的合理近似模型(rational approximation ofmaterial properties,简称RAMP)。而本文所用即为SIMP插值模型。

10路桥 结构设计原理大作业

某装配式钢筋混凝土简支T形梁设计 一、设计资料 (一)桥梁基本概况 1.桥面净空:净-7m+2×1.5m 2.设计荷载:公路-Ⅱ级汽车荷载,人群3.5KN/m2,结构安全等级为二级,内力计算结果见(二)3.材料规格: Ⅰ类环境条件,钢筋及混凝土材料规格由学生根据相关规定自选 4.结构尺寸: T形主梁:标准跨径L b=20.00m,计算跨径L j=19.50m,主梁全长L=19.96m 横断面及尺寸如图所示: 图1 桥面剖面示意图 图2 T梁横断面尺寸(mm) (二)内力计算(结果摘抄) 表1:弯矩标准值M d汇总表KN·m

表2 剪力标准值V d汇总表KN 二、设计依据 中华人民共和国行业标准《公路钢筋混凝土及预应力混凝土桥涵设计规范》JTG D62-2004 中华人民共和国行业标准《公路桥涵设计通用规范》JTG D60-2004 三、提交成果及要求 1.设计说明书一份 要求:内容完整,设计合理,引用公式正确,计算准确,书写工整; 2.一片主梁配筋图一张 内容:主梁配筋图、钢筋大样图 要求:用白绘图纸,绘3号图(可加长),作图规范,有图框、有标题栏,用铅笔绘图,写工程字; 3.必须自己独立完成设计,不得抄袭,一经发现抄袭者按零分处理。 四、参考文献 1.叶见曙主编,《结构设计原理》人民交通出版社第二版2005; 2.赵顺波主编:《混凝土结构设计原理》,同济大学出版社,2004.8; 3.张树仁等,《钢筋混凝土及预应力混凝土桥梁结构设计原理》,人民交通出版社,200 4.9 4.中华人民共和国行业标准:《公路钢筋混凝土及预应力混凝土桥涵设计规范》,人民交通出版社, 2004.10。 注:提交成果可用计算机完成,但必须打印规范,作图正确。

数据结构大作业

数据结构课程设计 题目:长整数四则运算 班级:信管12-1 学号:1201050642 姓名:庄术洁 指导老师:刘晓庆 2014年5月22日

一、需求分析 1、利用双向循环链表实现长整数的存储,每个结点含一个整数变量。任何整形变量的范围是—(2^15—1)~(2^15—1)。输入和输出形式:按中国对于长证书的表示习惯,每四位一组,组间用逗号隔开。 2、测试数据 (1) 0; 0;应输出“0” (2)—2345,6789;—7654,3211;应输出“—1,0000,0000”。 (3)—9999,9999;1,0000,0000,0000;应输出“9999,0000,0001”。 (4)1,0001,0001;—1,0001,0001;应输出“0”。 (5)1,0001,0001;—1,0001,0000;应输入“1”。 (6)—9999,9999,9999;—9999,9999,9999;应输出“—1,9999,9999,9998”。 (7)1,0000,9999,9999;1应输出“1,0001,0000,0000”。 二、概要设计 为上述程序功能,应以有序表实现长整数的存储,为此,需要抽象数据类型:有序表

(8)有序表的抽象数据类型定义为: ADT Dulinklist{ 数据对象: D={ai|ai为带符号整数,1,2,…,n,n>=0} 数据关系:R1={|ai-1,ai属于集合D,ai-1

数据结构大作业-纸牌游戏

数据结构课程设计大作业 题目纸牌游戏 专业计算机科学与技术 学生姓名 __________________ 学号 _____________________ 指导教师 __________________ 完成日期 __________________ 信息与工程学院

目录 一、实验内容概述(设计任务与技术要求) (1) 二、实验目的概述(总体设计方案) (1) 三、解题思路的描述(数据结构和算法的设计): (1) 四、源程序清单(源程序中应该附有必要的注释) (2) 五、程序调试及测试结果 (4) 六、结论 (4) 七、参考文献 (5)

【内容摘要】 编号为1~52的牌,正面向上,从第二张开始,以2为基数,是2的倍数的牌翻一次,直到最 后一张牌;然后,从第三张开始,以3为基数,是3的倍数的牌翻一次,直到最后一张牌;然后从 第四张开始,以4为基数,是4的倍数的牌翻一次,直到最后一张牌;依次类推,知道所有以52 为基数的牌翻过一次。输出:这时正面向上的牌有哪些? 【关键字】 52张纸牌,倍数,基数,数组 【Abstract 】 Numbered 1 to 52 cards, face up, starting from the second to 2 as the base, is a multiple of 2 cards turning on ce, un til the last card; and the n, begi nning from the third to 3 as the base,is a multiple of 3 cards turning once, un til the last card; and the n start from the fourth to 4 as the base, is a multiple of 4 cards turning once, un til the last card; and so on, that was all of 52base of the card turned over on ce.Output: At this time what the cards face up? 【Key words 】 52 cards, multiple, base, array

大工19秋《结构设计原理》大作业题目及要求参考答案

大连理工大学《结构设计原理》大作业 学习中心: 姓 名: 学 号: 题目二:钢结构题目。 已知钢屋架的端斜杆,截面为双角钢2∟125×80×10,长肢相连,如下图所示,承受的轴心拉力设计值kN 550=N ,两主轴方向计算长度分别为cm 240y 00==l l x ,试验算此截面的整体稳定性。钢材为Q235。 y y x x 122∟125×80×10 解:本题为双角钢轴压构件整体稳定验算,由于截面为单轴对称的构件,因此, 绕非对称轴x 轴的长细比用0x x x l i λ=计算,但绕对称轴y 轴应取计及扭转效应的换算长细比yz λ代替y λ。 (1)计算用数据 由附表可得:2215/f N mm =,239.4A cm =,

3.98x i cm =, 3.39y i cm = (2)计算长细比 024060.303.98 x x x l i λ=== 024070.803.39 y y y l i λ=== 绕y 轴的长细比采用换算长细比yz λ代替y λ, 022824080.480.4814.418 y l b t b ==<=?= 442222201.09 1.098170.80176.292401yz y y b l t λλ?????=+=?+= ? ? ?????? (3)验算整体稳定性 对x 、y 轴均属于b 类截面,且yz λ>x λ,由附表得:0.712yz ?= 3 22255010196.06/215/0.71239.410yz N N mm N mm A ??==

题目四:砌体结构中,高厚比的概念及其影响是? 答:砌体受压构件的计算高度与相应方向边长的比值称为高厚比。 影响砌体高厚比的主要因素有:砂浆强度;构件强度;砌体种类;支撑约束条件、截面形式;墙体开洞、承重和非承重。

西电数据结构大作业

题目:数据结构上机报告学院:电子工程学院 专业:信息对抗技术 学生姓名:甘佳霖 学号:14020310092

西安电子科技大学 数据结构课程实验报告实验名称线性表 电子工程学院 1402031 班Array姓名甘佳霖学号 14020310092 同作者 实验日期 2017 年 3 月 18 日

实验一线性表 一、实验目的 1.熟悉线性表的顺序和链式存储结构 2.掌握线性表的基本运算 3.能够利用线性表的基本运算完成线性表应用的运算 二、实验要求 1.设有一个线性表E={e1, e2, … , e n-1, e n},设计一个算法,将线性表逆置,即使元素排列次序颠倒过来,成为逆线性表E’={ e n, e n-1 , … , e2 , e1 },要求逆线性表占用原线性表空间,并且用顺序表和单链表两种方法表示,分别用两个程序来完成。 2.已知由不具有头结点的单链表表示的线性表中,含有三类字符的数据元素(字母、数字和其他字符),试编写算法构造三个以循环链表表示的线性表,使每个表中只含有同一类的字符,且利用原表中的结点空间,头结点可另辟空间。 三、设计思路 1.顺序表做逆置操作时将对应的首尾元素位置交换,单链表的指针end指向链表的末尾,指针start指向链表头结点,指针s用来找到指向end节点的节点,将指向链表末尾和头结点的存储内容交换,然后头结点指针指向下一节点,s指针从start节点开始遍历寻找指向end 指针的节点,并将end指针赋值为s指针,就完成了单链表的逆置,可以看出单链表和顺序表都可以完成线性表的逆置。 2.分解单链表的实现思路是首先新建3个循环链表,然后顺序遍历单链表,ASCII码判断链表中的元素属于哪一类元素,然后将这个元素添加到对应的循环链表中,从而实现分解单链表的功能。 四、运行结果 1.单链表逆置:

天大2016年12月《数据结构》期末大作业考核要求

数据结构 要求: 1. 独立完成,作答时要按照模版信息....填写完整,写明题型、题号; 2. 作答方式:手写作答或电脑录入,使用学院统一模版(模版详见附件); 3. 提交方式:以下两种方式任选其一, 1) 手写作答的同学可以将作业以图片形式打包压缩上传; 2) 提交电子文档的同学可以将作业以word 文档格式上传; 4. 上传文件命名为“中心-学号-姓名-科目.rar ” 或“中心-学号-姓名-科目.doc ”; 5. 文件容量大小:不得超过10MB 。 请在以下几组题目中,任选一组题目作答,满分100分。 第一组: 一、编程题(每小题30分,共60分) (一) 设顺序表L 是一个递增有序表,试写一算法,将x 插入L 中,并使L 仍是一个有序表。 (二) 用标准C 语言实现Hanoi 塔问题 二、解答题(20分) (一) 对下面的带权无向图采用prim 算法从顶点①开始构造最小生成树。(写出加入生成树顶点集合S 和选择Edge 的顺序) ① 9 10 ② 7 ③ 5 6 7 ④ ⑤ 11 8

三、画图题(20分) (一) 将给定的图简化为最小的生成树,要求从顶点1出发。 第二组: 一、编程题(每小题30分,共60分) (一) 对于二维整数数组A[m][n],对下列三种情况,分别编写相应的函数。 1.求数组所有边缘元素的数值和。 int sum1(int A[M][N],int m ,int n) { 2.求从A[0][0]开始的互不相邻的所有元素的和 注:一个元素的八个方向上的第一个元素均为相邻元素。 int sum2 (int A[M][N] , int m , int n) { 3. 假定m=n ,并为偶数,请分别计算正、反两条对角线上的元素值之和。 int sum3(int A[M][N] , int n) {

川大13年12月3日《结构设计原理(Ⅰ)(上)》第一次网上作业答案

川大13年12月3日《结构设计原理(Ⅰ)(上)》第一次网上作业答案 你的得分: 98.0 完成日期: 说明:每道小题括号里的答案是您最高分那次所选的答案,标准答案将在本次作业结束(即2013年03月14日)后显示在题目旁边。 一、单项选择题。本大题共10个小题,每小题 2.0 分,共20.0分。在每小题给出的选项中,只有一项是符合题目要求的。 1. 1. 结构上的荷载按作用时间的变异可分为三种,下列选项错误的是( B ) A.永久荷载 B.静态荷载 C.可变荷载 D.偶然荷载 2. 2. 以下关于楼面和屋面活荷载的描述,不正确的是( D ) A.屋面均布活荷载不应与雪荷载同时进行组合 B.积灰荷载应与雪荷载或不上人的屋面均布活荷载两者中的较大者同 时考虑 C.楼梯、看台、阳台和上人屋面的栏杆顶部应按规范的相关规定考虑水 平荷载 D.当采用荷载准永久组合时,应考虑施工和检修荷载及栏杆水平荷载。 3.下列描述,错误的是( C ) A. B.风载体型系数主要与建筑物的体型和尺度有关 C.高层建筑的基本风压按50年一遇的风压采用 D.风压高度变化系数不仅与高度有关,还与地面粗糙度有关。 4. 4. 以下关于双向板和单向板的论述,不正确的是( C ) A.双向板沿两个方向受弯 B.当板长短边跨度之比小于2时,应按双向板进行设计 C.当板长短边跨度之比大于2时,应按单向板进行设计 D.双向板的两个正交方向均应配置受力钢筋 5. 5. 下列哪项不是钢筋混凝土塑性铰所具有的特点( A ) A.塑性铰开始于受拉区混凝土开裂 B.塑性铰能承受一定的弯矩 C.塑性铰具有一定的长度 D.塑性铰是单向铰 6.以下关于超静定结构内力重分布的论述,错误的是( B ) A.对于钢筋混凝土超静定结构,塑性铰的出现并不一定表明该结构的承 载能力丧失 B.混凝土强度等级越高,塑性铰的转动能力越强 C.考虑内力重分布方法设计,可降低支座截面弯矩的设计值 D.塑性铰的转动能力虽配筋率的增加而降低 7.下列哪项不是单向板中需配置的构造钢筋( A )

数据结构大作业题目

《数据结构大作业》要求 一、作业目的 1、掌握用数据结构的知识进行Java或者C程序设计。 2、应用所学的数据结构完成一个具有一定实际意义的应用程序的设计、编码、调试,锻炼 实践动手能力,提高编程水平。 二、作业内容 1、图书管理系统 问题描述:实现图书管理系统,主要为图书管理员和借阅者提供管理和查询服务。 基本功能要求: 程序必须采用链表数据结构实现。 图书信息至少包括以下信息:书名,ISBN、作者、出版社、出版时间,入库时间,库存量(图书馆购买此书的数目),借阅数(被借阅的本数)。 图书管理员身份可以完成以下操作: (1)录入:增加一本图书信息; (2)删除:删除某一本图书的信息; (3)修改:修改某一本图书的信息; (4)查询:根据书名或图书ISBN等查询图书信息(可选择:简单条件查询,组合 条件查询等)。 (5)排序:根据书名或入库时间等信息进行排序,尽可能提高查找和维护性能; (6)借书:借出一本书,该书的借阅量增加一本。 (7)还书:还回一本书,该书的借阅量减少一本。 (8)统计:统计所有的借出的图书数目,即:所有图书借阅量之和。 (9)输出:输出所有图书的所有信息,要求格式清晰,方便查看。 扩展功能要求: (1)导出:把用户信息导出到文件中保存; (2)实现图形用户界面与用户进行交互。 2、学生管理系统 必须完成学籍登记表中的下面功能。 登记表中包括:学号、姓名、班级(如:13级软件1班)、性别、手机号码、选修课程等信息。 程序必须采用链表数据结构实现; (1)插入:将某学生的基本信息插入到登记表中; (2)删除:将满足条件的基本信息删除; (3)修改:对基本信息的数据项进行修改;

相关文档
最新文档