数据结构教程

数据结构教程
数据结构教程

第四章串

4.3

《数据结构题集》P.190

4.25

typedef struct {

char *ch;

int length;

}HString;

Status Replace(HString &s, HString t, HString v){

//用串v替换串s中所有的子串t

if (t.length==0) return ERROR;

i=0; j=0;

while (i<=s.length-1) {

while (i<=s.length-1 && j<=t.length-1) {

if (s.ch[i]==t.ch[j]){++i; ++j;}

else {i=i-j+2; j=0;}

}//while

if (j<=t.length-1) return OK;

pos=i-t.length;

if (!(s.ch=(char *)realloc(s.ch, (s.length-t.length+v.length)*sizeof(char)))) exit(OVERFLOW);

for (k=s.length-1; k>=i; --k)

s.ch[k-t.length+v.length]=s.ch[k];

s.ch[pos..pos+v.length-1]=v[0..v.length-1];

s.length=s.length-t.length+v.length;

i=pos+v.length; j=0;

}//while

return OK;

}//Replace

注意:在这里不能用串的其它基本操作来实现Replace

(以下内容来自https://www.360docs.net/doc/ed14798934.html,)

第四章串

4.10

void String_Reverse(Stringtype s,Stringtype &r)//求s的逆串r

{

StrAssign(r,''); //初始化r为空串

for(i=Strlen(s);i;i--)

{

StrAssign(c,SubString(s,i,1));

StrAssign(r,Concat(r,c)); //把s的字符从后往前添加到r中

}

}//String_Reverse

4.11

void String_Subtract(Stringtype s,Stringtype t,Stringtype &r)//求所有包含在串s中而t中没有的字符构成的新串r

{

StrAssign(r,'');

for(i=1;i<=Strlen(s);i++)

{

StrAssign(c,SubString(s,i,1));

for(j=1;j

if(i==j)

{

for(k=1;k<=Strlen(t)&&StrCompare(c,SubString(t,k,1));k++); //判断当前字符是否包含在t中

if(k>Strlen(t)) StrAssign(r,Concat(r,c));

}

}//for

}//String_Subtract

4.12

int Replace(Stringtype &S,Stringtype T,Stringtype V);//将串S中所有子串T替换为V,并返回置换次数

{

for(n=0,i=1;i<=Strlen(S)-Strlen(T)+1;i++) //注意i的取值范围

if(!StrCompare(SubString(S,i,Strlen(T)),T)) //找到了与T匹配的子串 { //分别把T的前面和后面部分保存为head和tail

StrAssign(head,SubString(S,1,i-1));

StrAssign(tail,SubString(S,i+Strlen(T),Strlen(S)-i-Strlen(T)+1) );

StrAssign(S,Concat(head,V));

StrAssign(S,Concat(S,tail)); //把head,V,tail连接为新串

i+=Strlen(V); //当前指针跳到插入串以后

n++;

}//if

return n;

}//Replace

分析:i+=Strlen(V);这一句是必需的,也是容易忽略的.如省掉这一句,则在某些

情况下,会引起不希望的后果,虽然在大多数情况下没有影响.请思考:设

S='place', T='ace', V='face',则省掉i+=Strlen(V);运行时会出现什么结果?

4.13

int Delete_SubString(Stringtype &s,Stringtype t)//从串s中删除所有与t 相同的子串,并返回删除次数

{

for(n=0,i=1;i<=Strlen(s)-Strlen(t)+1;i++)

if(!StrCompare(SubString(s,i,Strlen(t)),t))

{

StrAssign(head,SubString(S,1,i-1));

StrAssign(tail,SubString(S,i+Strlen(t),Strlen(s)-i-Strlen(t)+1) );

StrAssign(S,Concat(head,tail)); //把head,tail连接为新串

n++;

}//if

return n,

}//Delete_SubString

4.14

Status NiBoLan_to_BoLan(Stringtype str,Stringtype &new)//把前缀表达式str转换为后缀式new

{

Initstack(s); //s的元素为Stringtype类型

for(i=1;i<=Strlen(str);i++)

{

r=SubString(str,i,1);

if(r为字母) push(s,r);

else

{

if(StackEmpty(s)) return ERROR;

pop(s,a);

if(StackEmpty(s)) return ERROR;

pop(s,b);

StrAssign(t,Concat(r,b));

StrAssign(c,Concat(t,a)); //把算符r,子前缀表达式a,b连接为新子

前缀表达式c

push(s,c);

}

}//for

pop(s,new);

if(!StackEmpty(s)) return ERROR;

return OK;

}//NiBoLan_to_BoLan

分析:基本思想见书后注释3.23.请读者用此程序取代作者早些时候对3.23题给出的程序.

4.15

void StrAssign(Stringtype &T,char chars&#;)//用字符数组chars给串T赋值,Stringtype的定义见课本

{

for(i=0,T[ 0 ]=0;chars[i];T[ 0 ]++,i++) T[i+1]=chars[i];

}//StrAssign

4.16

char StrCompare(Stringtype s,Stringtype t)//串的比较,s>t时返回正数,s=t 时返回0,s

{

for(i=1;i<=s[ 0 ]&&i<=t[ 0 ]&&s[i]==t[i];i++);

if(i>s[ 0 ]&&i>t[ 0 ]) return 0;

else if(i>s[ 0 ]) return -t[i];

else if(i>t[ 0 ]) return s[i];

else return s[i]-t[i];

}//StrCompare

4.17

int String_Replace(Stringtype &S,Stringtype T,Stringtype V);//将串S 中所有子串T替换为V,并返回置换次数

{

for(n=0,i=1;i<=S[ 0 ]-T[ 0 ]+1;i++)

{

for(j=i,k=1;T[k]&&S[j]==T[k];j++,k++);

if(k>T[ 0 ]) //找到了与T匹配的子串:分三种情况处理

{

if(T[ 0 ]==V[ 0 ])

for(l=1;l<=T[ 0 ];l++) //新子串长度与原子串相同时:直接替换

S[i+l-1]=V[l];

else if(T[ 0 ]

{

for(l=S[ 0 ];l>=i+T[ 0 ];l--)

S[l+V[ 0 ]-T[ 0 ]]=S[l];

for(l=1;l<=V[ 0 ];l++)

S[i+l-1]=V[l];

}

else //新子串长度小于原子串时:先将后部左移

{

for(l=i+V[ 0 ];l<=S[ 0 ]+V[ 0 ]-T[ 0 ];l++)

S[l]=S[l-V[ 0 ]+T[ 0 ]];

for(l=1;l<=V[ 0 ];l++)

S[i+l-1]=V[l];

}

S[ 0 ]=S[ 0 ]-T[ 0 ]+V[ 0 ];

i+=V[ 0 ];n++;

}//if

}//for

return n;

}//String_Replace

4.18

typedef struct {

char ch;

int num;

} mytype;

void StrAnalyze(Stringtype S)//统计串S中字符的种类和个数

{

mytype T[MAXSIZE]; //用结构数组T存储统计结果

for(i=1;i<=S[ 0 ];i++)

{

c=S[i];j=0;

while(T[j].ch&&T[j].ch!=c) j++; //查找当前字符c是否已记录过

if(T[j].ch) T[j].num++;

else T[j]={c,1};

}//for

for(j=0;T[j].ch;j++)

printf("%c: %d\n",T[j].ch,T[j].num);

}//StrAnalyze

4.19

void Subtract_String(Stringtype s,Stringtype t,Stringtype &r)//求所有包含在串s中而t中没有的字符构成的新串r

{

r[ 0 ]=0;

for(i=1;i<=s[ 0 ];i++)

{

c=s[i];

for(j=1;j

if(i==j)

{

for(k=1;k<=t[ 0 ]&&t[k]!=c;k++); //判断当前字符是否包含在t中 if(k>t[ 0 ]) r[++r[ 0 ]]=c;

}

}//for

}//Subtract_String

4.20

int SubString_Delete(Stringtype &s,Stringtype t)//从串s中删除所有与t 相同的子串,并返回删除次数

{

for(n=0,i=1;i<=s[ 0 ]-t[ 0 ]+1;i++)

{

for(j=1;j<=t[ 0 ]&&s[i+j-1]==t[i];j++);

if(j>m) //找到了与t匹配的子串

{

for(k=i;k<=s[ 0 ]-t[ 0 ];k++) s[k]=s[k+t[ 0 ]]; //左移删除

s[ 0 ]-=t[ 0 ];n++;

}

}//for

return n;

}//Delete_SubString

4.21

typedef struct{

char ch;

LStrNode *next;

} LStrNode,*LString; //链串结构

void StringAssign(LString &s,LString t)//把串t赋值给串s

{

s=malloc(sizeof(LStrNode));

for(q=s,p=t->next;p;p=p->next)

{

r=(LStrNode*)malloc(sizeof(LStrNode));

r->ch=p->ch;

q->next=r;q=r;

}

q->next=NULL;

}//StringAssign

void StringCopy(LString &s,LString t)//把串t复制为串s.与前一个程序的区别在于,串s业已存在.

{

for(p=s->next,q=t->next;p&&q;p=p->next,q=q->next)

{

p->ch=q->ch;pre=p;

}

while(q)

{

p=(LStrNode*)malloc(sizeof(LStrNode));

p->ch=q->ch;

pre->next=p;pre=p;

}

p->next=NULL;

}//StringCopy

char StringCompare(LString s,LString t)//串的比较,s>t时返回正数,s=t 时返回0,s

{

for(p=s->next,q=t->next;p&&q&&p->ch==q->ch;p=p->next,q=q->next); if(!p&&!q) return 0;

else if(!p) return -(q->ch);

else if(!q) return p->ch;

else return p->ch-q->ch;

}//StringCompare

int StringLen(LString s)//求串s的长度(元素个数)

{

for(i=0,p=s->next;p;p=p->next,i++);

return i;

}//StringLen

LString * Concat(LString s,LString t)//连接串s和串t形成新串,并返回指针

{

p=malloc(sizeof(LStrNode));

for(q=p,r=s->next;r;r=r->next)

{

q->next=(LStrNode*)malloc(sizeof(LStrNode));

q=q->next;

q->ch=r->ch;

}//for //复制串s

for(r=t->next;r;r=r->next)

{

q->next=(LStrNode*)malloc(sizeof(LStrNode));

q=q->next;

q->ch=r->ch;

}//for //复制串t

q->next=NULL;

return p;

}//Concat

LString * Sub_String(LString s,int start,int len)//返回一个串,其值等于串s从start位置起长为len的子串

{

p=malloc(sizeof(LStrNode));q=p;

for(r=s;start;start--,r=r->next); //找到start所对应的结点指针r

for(i=1;i<=len;i++,r=r->next)

{

q->next=(LStrNode*)malloc(sizeof(LStrNode));

q=q->next;

q->ch=r->ch;

} //复制串t

q->next=NULL;

return p;

}//Sub_String

4.22

4.23

书后对这两题给出了一些提示.由于作者对这些提示的可行性感到困惑,或者尚没有完全理解其意图,致使无法给出参考算法.请读者认真思考后自行写出,欢迎发表你的解答.

4.24

void HString_Concat(HString s1,HString s2,HString &t)//将堆结构表示的串s1和s2连接为新串t

{

if(t.ch) free(t.ch);

t.ch=malloc((s1.length+s2.length)*sizeof(char));

for(i=1;i<=s1.length;i++) t.ch[i-1]=s1.ch[i-1];

for(j=1;j<=s2.length;j++,i++) t.ch[i-1]=s2.ch[j-1];

t.length=s1.length+s2.length;

}//HString_Concat

4.25

int HString_Replace(HString &S,HString T,HString V)//堆结构串上的置换操作,返回置换次数

{

for(n=0,i=0;i<=S.length-T.length;i++)

{

for(j=i,k=0;k

if(k==T.length) //找到了与T匹配的子串:分三种情况处理

{

if(T.length==V.length)

for(l=1;l<=T.length;l++) //新子串长度与原子串相同时:直接替换 S.ch[i+l-1]=V.ch[l-1];

else if(T.length

for(l=S.length-1;l>=i+T.length;l--)

S.ch[l+V.length-T.length]=S.ch[l];

for(l=0;l

S[i+l]=V[l];

}

else //新子串长度小于原子串时:先将后部左移

{

for(l=i+V.length;l

S.ch[l]=S.ch[l-V.length+T.length];

for(l=0;l

S[i+l]=V[l];

}

S.length+=V.length-T.length;

i+=V.length;n++;

}//if

}//for

return n;

}//HString_Replace

4.26

Status HString_Insert(HString &S,int pos,HString T)//把T插入堆结构表示的串S的第pos个字符之前

{

if(pos<1) return ERROR;

if(pos>S.length) pos=S.length+1;//当插入位置大于串长时,看作添加在串尾

S.ch=realloc(S.ch,(S.length+T.length)*sizeof(char));

for(i=S.length-1;i>=pos-1;i--)

S.ch[i+T.length]=S.ch[i]; //后移为插入字符串让出位置

for(i=0;i

S.ch[pos+i-1]=T.ch[pos]; //插入串T

S.length+=T.length;

return OK;

}//HString_Insert

4.27

int Index_New(Stringtype s,Stringtype t)//改进的定位算法

{

i=1;j=1;

while(i<=s[ 0 ]&&j<=t[ 0 ])

{

if((j!=1&&s[i]==t[j])||(j==1&&s[i]==t[j]&&s[i+t[ 0 ]-1]==t[t[ 0 ]])) { //当j==1即匹配模式串的第一个字符时,需同时匹配其最后一个

i=i+j-2;

j=1;

}

else

{

i++;j++;

}

}//while

if(j>t[ 0 ]) return i-t[ 0 ];

}//Index_New

4.28

void Lget_next(LString &T)//链串上的get_next算法

{

p=T->succ;p->next=T;q=T;

while(p->succ)

{

if(q==T||p->data==q->data)

{

p=p->succ;q=q->succ;

p->next=q;

}

else q=q->next;

}//while

}//Lget_next

4.29

LStrNode * LIndex_KMP(LString S,LString T,LStrNode *pos)//链串上的KMP 匹配算法,返回值为指针

{

p=pos;q=T->succ;

while(p&&q)

{

if(q==T||p->chdata==q->chdata)

{

p=p->succ;

q=q->succ;

}

else q=q->next;

}//while

if(!q)

{

for(i=1;i<=Strlen(T);i++)

p=p->next;

return p;

} //发现匹配后,要往回找子串的头

return NULL;

}//LIndex_KMP

4.30

void Get_LRepSub(Stringtype S)//求S的最长重复子串的位置和长度

{

for(maxlen=0,i=1;i

{

for(k=0,j=1;j<=S[ 0 ]-i;j++)//j为串S2的当前指针,此时串S1的当前指针为i+j,两指针同步移动

{

if(S[j]==S[j+i]) k++; //用k记录连续相同的字符数

else k=0; //失配时k归零

if(k>maxlen) //发现了比以前发现的更长的重复子串

{

lrs1=j-k+1;lrs2=mrs1+i;maxlen=k; //作记录

}

}//for

}//for

if(maxlen)

{

printf("Longest Repeating Substring length:%d\n",maxlen);

printf("Position1:%d Position 2:%d\n",lrs1,lrs2);

}

else printf("No Repeating Substring found!\n");

}//Get_LRepSub

分析:i代表"错位值".本算法的思想是,依次把串S的一个副本S2向右错位平移1格,2格,3格,...与自身S1相匹配,如果存在最长重复子串,则必然能在此过程中被发现.用变量lrs1,lrs2,maxlen来记录已发现的最长重复子串第一次出现位置,第二次出现位置和长度.题目中未说明"重复子串"是否允许有重叠部分,本算法假定允许.如不允许,只需在第二个for语句的循环条件中加上k<=i即可.本算法时间复杂度为O(Strlen(S)^2).

4.31

void Get_LPubSub(Stringtype S,Stringtype T)//求串S和串T的最长公共子串位置和长度

{

if(S[ 0 ]>=T[ 0 ])

{

StrAssign(A,S);StrAssign(B,T);

}

else

{

StrAssign(A,T);StrAssign(B,S);

} //为简化设计,令S和T中较长的那个为A,较短的那个为B

for(maxlen=0,i=1-B[ 0 ];i

{

if(i<0) //i为B相对于A的错位值,向左为负,左端对齐为0,向右为正

{

jmin=1;jmax=i+B[ 0 ];

}//B有一部分在A左端的左边

else if(i>A[ 0 ]-B[ 0 ])

{

jmin=i;jmax=A[ 0 ];

}//B有一部分在A右端的右边

else

{

jmin=i;jmax=i+B[ 0 ];

}//B在A左右两端之间.

//以上是根据A和B不同的相对位置确定A上需要匹配的区间(与B重合的区间)的端点:jmin,jmax.

for(k=0,j=jmin;j<=jmax;j++)

{

if(A[j]==B[j-i]) k++;

else k=0;

if(k>maxlen)

{

lps1=j-k+1;lps2=j-i-k+1;maxlen=k;

}

}//for

}//for

if(maxlen)

{

if(S[ 0 ]>=T[ 0 ])

{

lpsS=lps1;lpsT=lps2;

}

else

{

lpsS=lps2;lpsT=lps1;

} //将A,B上的位置映射回S,T上的位置

printf("Longest Public Substring length:%d\n",maxlen);

printf("Position in S:%d Position in T:%d\n",lpsS,lpsT);

}//if

else printf("No Repeating Substring found!\n");

}//Get_LPubSub

分析:本题基本思路与上题同.唯一的区别是,由于A,B互不相同,因此B不仅要向右错位,而且还要向左错位,以保证不漏掉一些情况.当B相对于A的位置不同时,需要匹配的区间的计算公式也各不相同,请读者自己画图以帮助理解.本算法的时间复杂度是o(strlrn(s)*strlen(t))。

《数据结构》教学纲要(doc 9页)

《数据结构》教学纲要(doc 9页)

《数据结构》教学大纲 2001年9月 一、开课系(部):经济信息管理系 二、教学对象:信息管理与信息系统专业本科 三、教学目的: 数据结构是高等教育计算机信息管理专业中的一门专业基础课,在计算机软件的各个领域中均会使用到数据结构的有关知识。本课程的目的和任务是使学生较全面地掌握各种常用的数据结构,为学习后续软件课程提供必要的基础,提高运用数据结构解决实际问题的能力。 四、教学要求: 1. 从数据结构的逻辑结构、存储结构和数据的运算三个方面去掌握线性表、栈、队列、串、数组、广义表、树、图和文件等常用的数据结构。 2. 掌握在各种常用的数据结构上实现的排序和查找运算。 3. 对算法的时间和空间复杂性有一定的分析能力。 4. 针对简单的应用问题.应能选择合适的数据结构及设计有效的算法解决之。 五、教学课时: 教学内容课内学时 第1章绪论 2 第2章线性表 4 第3章栈和队列 6 第4章串 4 笫5章数组和广义表 4 第6章树和二叉树 6 第7、8章略 第9章查找 4 第10章内部排序 4 课程总复习 2 六、考核形式: 期末考试与平时讨论相结合(80%和20%)。 期末试卷结构: 单项选择填空简答应用算法设计 20 15分20分15分30分

态。 3.3 算法描述和算法分析的方法,对于一般算法能分析出时间复杂度。 第2章线性表 (一)课程内容 2.1 线性表的逻辑结构 2.2 线性表的顺序存储结构 2.3 线性表的链式存储结构 2.4 顺序表和链表的比较 (二)学习目的与要求 本章目的是介绍线性表的逻辑结构和各种存储表示方法,以及定义在逻辑结构上的各种基本运算及其在存储结构上如何实现这些基本运算。要求在熟悉这些内容的基础上,能够针对具体应用问题的要求和性质,选择合适的存储结构设计出相应的有效算法,解决与线性表相关的实际问题。本章重点是熟练掌握顺序表和单链表上实现的各种基本算法及相关的时间性能分析,难点是能够使用本章所学到的基本知识设计有效算法解决与线性表相关的应用问题。 (三)考核知识点与考核要求 1. 线性表的逻辑结构,要求达到“识记”层次。 1.1 线性表的逻辑结构特征。 1.2 线性表上定义的基本运算,并能利用基本运算构造出较复杂的运算。 2. 线性表的顺序存储结构.要求达到“综合应用”层次。 2.1 顺序表的含义及特点,即顺序表如何反映线性表中元素之间的逻辑关系。 2.2 顺序表上的插入、删除操作及其平均时间性能分析。 2.3 利用顺序表设计算法解决筒单的应用问题。 3. 线性表的链式存储结构,要求达到“综合应用”层次。 3.1 链表如何表示线性表中元素之间的逻辑关系。 3.2 链表中头指针和头结点的使用。 3.3 单链表、双链表、循环链表链接方式上的区别。 3.4 单链表上实现的建表、查找、插入和删除等基本算法,并分析其时间复杂度。 3.5 循环链表上尾指针取代头指针的作用,以及单循环链表上的算法与单链表上相应算法的异同点。 3.6 双链表的定义及其相关的算法。 3.7 利用链表设计算法解决简单的应用问题。 4.顺序表和链表的比较.要求达到“领会”层次。

数据结构实用教程第二版答案_徐孝凯

第一章绪习题一 1.有下列几种用二元组表示的数据结构,试画出它们分别对应的图形表示(当出现多个关系时, 对每个关系画出相应的结构图),并指出它们分别属于何种结构。 ⑴ A=(K,R)其中 K={a1,a2,a3...,an} R={} ⑵ B=(K,R)其中 K={a,b,c,d,e,f,g,h} R={r} r={,,,,,,} ⑶ C=(K,R)其中 K={a,b,c,d,f,g,h} R={r} r={,,,,,,} ⑷ D=(K,R)其中 K={1,2,3,4,5,6} R={r} r={(1,2),(2,3),(2,4),(3,4),(3,5),(3,6),(4,5),(4,6)} ⑸ E=(K,R)其中 K={48,25,64,57,82,36,75,43} R={r1,r2,r3} r1={<48,25>,<25,64>,<64,57>,<57,82>,<82,36>,<36,75>,<75,43>} r2={<48,25>,<48,64>,<64,57>,<64,82>,<25,36>,<82,75>,<36,43>} r3={<25,36>,<36,43>,<43,48>,<48,57>,<57,64>,<64,75>,<75,82>} 解:⑴是集合结构;⑵是线性结构;⑶⑷是树型结构;⑸散列结构。只作为参考。 2.设计二次多项式ax2+bx+c的一种抽象数据类型,假定起名为QIAdratic, 该类型的数据部分分为三个系数项a、b和c,操作部分为:(请写出下面每一个操作的具体实现)。 ⑴初始化数据成员ab和c(假定用记录类型Quadratie定义成员),每个数据成员的默认值为0。 Quadratic InitQuadratic(float aa=0,float bb=0,float cc=0); 解: Quadratic InitQuadratic(float aa,float bb,float cc) { Quadratic q; q.a=aa; q.b=bb; q.c=cc; return q; }

《数据结构基础教程》习题及解答

《数据结构基础教程》习题及解答

《数据结构基础教程》习题解答(新) 第1章习题解答 一、填空 1.数据是指所有能够输入到计算机中被计算机加工、处理的符号的集合。 2.可以把计算机处理的数据,笼统地分成数值型和非数值型两大类。 3.数据的逻辑结构就是指数据间的邻接关系。 4.数据是由一个个数据元素集合而成的。5.数据项是数据元素中不可再分割的最小标识单位,通常不具备完整、确定的实际意义,只是反映数据元素某一方面的属性。 6.数据是以数据元素为单位存放在内存的,分配给它的内存区域称为存储结点。 7.每个数据元素都具有完整、确定的实际意义,是数据加工处理的对象。 8.如果两个数据结点之间有着逻辑上的某种

关系,那么就称这两个结点是邻接的。 9.在一个存储结点里,除了要有数据本身的内容外,还要有体现数据间邻接关系的内容。10.从整体上看,数据在存储器内有两种存放的方式:一是集中存放在一个连续的内存存储区中;一是利用存储器中的零星区域,分散地存放在内存的各个地方。 11.在有些书里,数据的“存储结构”也称为数据的“物理结构”。 12.“基本操作”是指算法中那种所需时间与操作数的具体取值无关的操作。 二、选择 1.在常见的数据处理中,B 是最基本的处理。 A.删除B.查找C.读取D.插入 2.下面给出的名称中, A 不是数据元素的同义词。 A.字段B.结点C.顶点D.记录 3.D 是图状关系的特例。

A.只有线性关系B.只有树型关系 C.线性关系和树型关系都不D.线性关系和树型关系都 4.链式存储结构中,每个数据的存储结点里D指向邻接存储结点的指针,用以反映数据间的逻辑关系。 A.只能有1个B.只能有2个C.只能有3个D.可以有多个 5.本书将采用C 来描述算法。 A.自然语言B.流程图(即框图)C.类C语言D.C语言 6.有下面的算法段: for (i=0; i

机械设计常用资料大全

机械设计常用资料大全》(Mechanical design common documents daqo)1.0 这么多的机械设计用资料,对你进行机械设计或者学习,有非常大的帮助,省去了你查找资料的时间。本资源对机械设计的资料进行了分类,极大地方便了你下载需要参考的资料,同时也会对你学习机械专业知识,有一个整体性的了解,可以帮助你应该加强哪部分内容的学习! 供在校大学生或机械类工程技术人员使用。 一、手册类 机械设计课程设计手册(第三版) 机械设计手册(第五版)第1卷 机械设计手册(第五版)第2卷 机械设计手册(第五版)第3卷 机械设计手册(第五版)第4卷 机械设计手册(第五版)第5卷 机械设计手册.(新版).第1卷 机械设计手册.(新版).第2卷 机械设计手册.(新版).第3卷 机械设计手册.(新版).第4卷 机械设计手册.(新版).第5卷 机械设计手册.(新版).第6卷 [精密加工技术实用手册].精密加工技术实用手册 包装机械选用手册上-印刷实务 包装机械选用手册下-印刷实务 机电一体化专业必备知识与技能手册 机械工程师手册.第二版 机械加工工艺师手册 机械设计、制造常用数据及标准规范实用手册 机械制图手册(清晰版) 机械制造工艺设计简明手册 联轴器、离合器与制动器设计选用手册 实用机床设计手册 运输机械设计选用手册.上册 运输机械设计选用手册.下册 中国机械设计大典数据库 最新金属材料牌号、性能、用途及中外牌号对照速用速查实用手册 最新实用五金手册(修订本) 最新轴承手册 二、机构类 高等机构设计 机构参考手册 机构创新设计方法学 机构设计丛书.凸轮机构设计 机构设计实用构思图册-verygood

数据结构课程教学大纲

《数据结构》教学大纲 课程性质专业必修课 课程名称数据结构课程编号*04069 适用专业计算机科学与技术/软件工程开课学期第3学期 总学时64 理论50 学分数 4 实践14 一、课程性质与目标 数据结构课程属于专业必修课。通过本课程数据结构的学习,学生应实现如下目标: 1.知识目标:本课程主要讲述线性表、栈、队列、字符串、数组、树、二叉树、图、查找表、内部排序等常用数据结构的基本概念、操作及其典型应用例子。通过本课程的学习,应使学生掌握数据结构的概念及不同的存储结构、掌握一些典型算法原理和方法,且能够在不同存储结构上实现编程,同时,对于算法设计的方式和技巧也有所体会。 2.能力目标 (1)独立获取知识的能力——逐步掌握科学的学习方法,不断地扩展知识面,增强独立思考的能力,更新知识结构; (2)科学观察和思维的能力——运用数据结构的基本理论,熟悉各种基本数据结构及其操作,学会根据实际问题要求来选择数据结构。 (3)分析问题和解决问题的能力——学会利用数据结构原理分析实际问题,提高发现问题与解决问题的能力。对部分优秀的学生,培养其在知名程序设计在线评测系统(如POJ等)中求解实际问题的能力。 (4)求实精神——通过数据结构理论课程教学,培养学生严谨求实的科学态度和刻苦钻研的作风。 (5)实践能力——通过学习,有意识地培养学生编写高质量、高效率程序的能力和风格。 3.素质目标:使学生具备一定的计算思维,热爱算法设计和程序实现,面对实际问题能转换为计算机能够求解的过程并选择合适的数据结构,设计出在时间和空间上具备一定高效率的程序,培养学生学习算法设计与实现的细心和耐心,培养学生坚韧不拔,攀登技术高峰的优秀品质。让部分优秀的学生热爱上湖南省大学生程序设计竞赛,体会ACM程序设计竞赛的魅力。 二、课程教学基本要求 课程前应该认真预习,特别是前导课程相关知识体系; 课中应该认真听课,参与教学过程中的互动、回答问题及联系实际编程; 课后积极做好复习、认真完成作业及课程设计相关实践教学的环节。作业应具备一定实用性的数据结构和算法实现为主,对部分优秀学生,引入一定量的知名程序设计在线评测系统(如POJ等)中与数据结构相关的题目进行编程并在线提交验证正确性与时间、空间效率。 三、教学内容与学时分配

数据结构教程李春葆第4版知识点习题答案

第1章绪论 知识点归纳 一、数据结构概述 1.数据结构的定义 (1)基本概念 数据是描述客观事物的数和字符的集合,是计算机能操作的对象的总称,也是计算机处理信息的某种特定的符号表示形式。 (2)相关术语 ① 数据元素 数据元素又称元素、节点、顶点、记录等。数据元素是数据的基本单位。有时候,一个数据元素可以由若干个数据项组成。 ② 数据项 数据项又称字段或域,它是具有独立含义的最小数据单位。 ③ 数据对象 数据对象是性质相同的数据元素的集合,它是数据的子集。 (3)数据结构的内容 ① 数据元素之间的逻辑关系,即数据的逻辑结构,它是数据结构在用户面前呈现的形式。 ② 数据元素及其关系在计算机存储器中的存储方式,即数据的存储结构,又称数据的物理结构。 ③ 施加在数据上的操作,即数据的运算。 (4)逻辑结构 数据的逻辑结构是从逻辑关系(主要是指数据元素的相邻关系)上描述数据的,它与数据的存储无关,是独立于计算机的。因此,数据的逻辑结构可以看作是从具体问题抽象出来的数学模型。 (5)存储结构 数据的存储结构是逻辑结构用计算机语言的实现或在计算机中的表示(又称映像),也就是逻辑结构在计算机中的存储方式,它是依赖于计算机语言的。一般只在高级语言(例如C/C++语言)的层次上讨论存储结构。 数据的运算最终需在对应的存储结构上用算法实现。 总之,数据结构是一门讨论“描述现实世界实体的数学模型(通常为非数值计算)及其之上的运算在计算机中如何表示和实现”的学科。 (6)数据结构的表示 对于一种数据结构,其逻辑结构总是惟一的,但它可能对应多种存储结构,并且在不同的存储结构中,同一运算的实现过程可能不同。 描述数据结构通常采用二元组表示:

数据结构(第二版)课后习题答案(王红梅主编)

第 1 章绪论 课后习题讲解 1. 填空 ⑴()是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。 【解答】数据元素 ⑵()是数据的最小单位,()是讨论数据结构时涉及的最小数据单位。 【解答】数据项,数据元素 【分析】数据结构指的是数据元素以及数据元素之间的关系。 ⑶从逻辑关系上讲,数据结构主要分为()、()、()和()。【解答】集合,线性结构,树结构,图结构 ⑷数据的存储结构主要有()和()两种基本方法,不论哪种存储结构,都要存储两方面的内容:() 和()。 【解答】顺序存储结构,链接存储结构,数据元素,数据元素之间的

关系 ⑸算法具有五个特性,分别是()、()、()、()、()。 【解答】有零个或多个输入,有一个或多个输出,有穷性,确定性,可行性 ⑹算法的描述方法通常有()、()、()和()四种,其中,()被称为算法语言。 【解答】自然语言,程序设计语言,流程图,伪代码,伪代码 ⑺在一般情况下,一个算法的时间复杂度是()的函数。 【解答】问题规模 ⑻设待处理问题的规模为n,若一个算法的时间复杂度为一个常数,则表示成数量级的形式为(),若 为n*log25n,则表示成数量级的形式为()。 【解答】Ο(1),Ο(nlog2n) 【分析】用大O记号表示算法的时间复杂度,需要将低次幂去掉,将最高次幂的系数去掉。 2. 选择题

⑴顺序存储结构中数据元素之间的逻辑关系是由()表示的,链接存储结构中的数据元素之间的逻辑关 系是由()表示的。 A 线性结构 B 非线性结构 C 存储位置 D 指针 【解答】C,D 【分析】顺序存储结构就是用一维数组存储数据结构中的数据元素,其逻辑关系由存储位置(即元素在数 组中的下标)表示;链接存储结构中一个数据元素对应链表中的一个结点,元素之间的逻辑关系由结点中 的指针表示。 ⑵假设有如下遗产继承规则:丈夫和妻子可以相互继承遗产;子女可以继承父亲或母亲的遗产;子女间不 能相互继承。则表示该遗产继承关系的最合适的数据结构应该是()。 A 树 B 图 C 线性表 D 集合

数据结构课程教学大纲共三套

数据结构课程教学大纲(三套) 《数据结构》课程教学大纲(36/36课时) 一、课程的性质和任务 数据结构是计算机及应用专业中一门重要的专业基础课程,在计算机软件的各个领域中均会使用到数据结构的有关知识。当用计算机来解决实际问题时,就要涉及到数据的表示及数据的处理,而数据表示及数据处理正是数据结构课程的主要研究对象,通过这两方面内容的学习,为后续课程,特别是软件方面的课程打开厚实的基础。因此,数据结构课程在计算机应用专业中具有举足轻重的作用。 本课程的任务是:在基础方面,要求学员掌握常用数据结构的基本概念及其不同的实现方法;在技能方面,通过系统学习能够在不同存储结构上实现不同的运算,并对算法设计的方式和技巧有所体会。总言之,使应用者较全面的掌握各种常用的数据结构,提高运用数据结构解决实际问题的能力。 二、课程的基本要求 本课程的教学基本要求如下: 本课程要求理论必须与上机实践操作相结合,多做题和调试算法,实现算法。实践项目只利用课堂时间是不够的,必须提前布置给学生。通过本课程的学习与实践,学生应达到: 1、掌握数据结构的基本概念和基本理论; 2、熟练掌握顺序表、链表、队列、栈、树以及二叉树、图等基本数据结构的设计和分析; 3、熟练地掌握常用算法(递归、遍历、查找、排序)的知识; 4、能对所求解的问题进行分析,抽象出逻辑结构,选择合适的存储结构,定义所需的运算,设计相应的算法; 5、对算法进行分析和评价。

三、教学内容(一)理论教学

(二)实践环节

四、课时分配 《数据结构》课程共4学分,课内72学时,其中理论课36学时,上机36学时。 五、大纲说明 本课程必须理论与上机实践操作相结合,并要教、学、练相结合,讲清基本

结构设计常用数据

结构设计常用数据

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

混凝土结构设计规范 表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) 结构类型 室内或土 露天

数据结构课程习题集第1页共25页

《数据结构》课程习题集第 1 页(共 25 页) 一、. 选择题 . 1. 算法的计算量的大小称为计算的()。 A.效率 B. 复杂性 C. 现实性 D. 难度 .2. 算法的时间复杂度取决于(). A.问题的规模 B. 待处理数据的初态 C. A和B D. 难确定 .3. 下面关于算法说法错误的是() A.算法最终必须由计算机程序实现 B.为解决某问题的算法同为该问题编写的程序含义是相同的 C. 算法的可行性是指指令不能有二义性 D. 以上几个都是错误的.4.从逻辑上可以把数据结构分为()两大类。 A.动态结构、静态结构 B.顺序结构、链式结构 C.线性结构、非线性结构 D.初等结构、构造型结构 .5.以下数据结构中,哪一个是线性结构()? A.广义表 B. 二叉树 C. 稀疏矩阵 D. 串 .6.下述哪一条是顺序存储结构的优点?() A.存储密度大 B.插入运算方便

C.删除运算方便 D.可方便地用于各种逻辑结构的存储表示 .7.下面关于线性表的叙述中,错误的是哪一个?() A.线性表采用顺序存储,必须占用一片连续的存储单元。 B.线性表采用顺序存储,便于进行插入和删除操作。 C.线性表采用链接存储,不必占用一片连续的存储单元。 D.线性表采用链接存储,便于插入和删除操作。 .8.若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用()存储方式最节省时间。 A.顺序表 B.双链表 C.带头结点的双循环链表 D.单循环链表 .9.设一个链表最常用的操作是在末尾插入结点和删除尾结点,则选用( )最节省时间。 A. 单链表 B.单循环链表 C. 带尾指针的单循环链表 D.带头结点的双循环链表 .10. 链表不具有的特点是(). A.插入、删除不需要移动元素 B.可随机访问任一元素 C.不必事先估计存储空间 D.所需空间与线性长度成正比 .11. 设一个栈的输入序列是 1,2,3,4,5,则下列序列中,是栈的合法输出序列的是()。 A. 5 1 2 3 4 B. 4 5 1 3 2 C. 4 3 1 2 5 D. 3 2 1 5 4 .12. 某堆栈的输入序列为a, b,c ,d,下面的四个序列中,不可能是它的输出序列的是()。 A. a,c,b,d B. b, c,d,a C. c, d,b, a D. d, c,a,b

数据结构教学大纲(完整资料).doc

【最新整理,下载后即可编辑】 XX师范学院大学本科专业教学大纲中文课程名称:数据结构 英文课程名称:Data Structures 适用专业:信息管理与信息系统 制定单位:商学院 执笔人: 审核人: 单位负责人: 制定时间:2017-2-10 XX师范学院教务处

二〇一七年一月

《数据结构》课程教学大纲 一、课程基本信息 (一)课程代码及课程名称 1.课程代码:06151090 2.课程名称(中/英文):数据结构/Data Structures (二)课程类别及课程性质 专业教育必修课程 (三)学时及学分: 总学时数:64;总学分数:3。 其中,讲授学时:32 ,实践(实验)学时:32。 (四)适用专业及开设学期 适用专业:信息管理与信息系统(本科) 开设学期:第二学期 (五)先修课程与后续课程 先修课程:大学计算机基础、高等数学、C语言程序设计 后续课程:数据库原理与应用、管理信息系统分析与设计、管理信息系统、Java程序设计(高级) 二、课程简介 “数据结构”是信息管理与信息系统专业一门重点专业基础

课程,也是学科专业核心专业基础课程之一,属于专业学位必修课程。本课程的教学任务是针对大量的信息处理对象,介绍对象信息与数据表示的各种抽象的、基本的逻辑结构及其上的基本运算操作。通过研究各种基本数据结构内在的逻辑关系和它们在计算机中的存储表示方式,初步建立数据结构上基本运算操作的正确性概念,同时,结合各种典型问题讨论其上的各种基本运算操作及其基本算法,讲授各种数据结构的特点、适用范围,以及对一些基本算法效率的定性和定量分析方法,为后续课程提供必要的数据结构基础。此外,配合实验课程的教学中,学生应理论联系实际,理论指导实践,通过规范地完成一系列数据结构实验进一步巩固所学的相关书本知识,在知识、能力、素质上得到进一步的提高。 三、教学目的与基本要求 (一)该课程教学目的与专业培养要求对应关系矩阵

《数据结构基础教程》习题及解答

《数据结构基础教程》习题解答(新) 第1章习题解答 一、填空 1.数据就是指所有能够输入到计算机中被计算机加工、处理得符号得集合。 2.可以把计算机处理得数据,笼统地分成数值型与非数值型两大类。 3.数据得逻辑结构就就是指数据间得邻接关系。 4.数据就是由一个个数据元素集合而成得。 5.数据项就是数据元素中不可再分割得最小标识单位,通常不具备完整、确定得实际意义,只就是反映数据元素某一方面得属性。 6.数据就是以数据元素为单位存放在内存得,分配给它得内存区域称为存储结点。 7.每个数据元素都具有完整、确定得实际意义,就是数据加工处理得对象。 8.如果两个数据结点之间有着逻辑上得某种关系,那么就称这两个结点就是邻接得。 9.在一个存储结点里,除了要有数据本身得内容外,还要有体现数据间邻接关系得内容。 10.从整体上瞧,数据在存储器内有两种存放得方式:一就是集中存放在一个连续得内存存储区中;一就是利用存储器中得零星区域, 分散地存放在内存得各个地方。 11.在有些书里,数据得“存储结构”也称为数据得“物理结构”。 12.“基本操作”就是指算法中那种所需时间与操作数得具体取值无关得操作。 二、选择 1.在常见得数据处理中, B 就是最基本得处理。 A.删除 B.查找 C.读取 D.插入 2.下面给出得名称中, A 不就是数据元素得同义词。 A.字段 B.结点 C.顶点 D.记录 3. D 就是图状关系得特例。 A.只有线性关系 B.只有树型关系 C.线性关系与树型关系都不 D.线性关系与树型关系都 4.链式存储结构中,每个数据得存储结点里 D指向邻接存储结点得指针,用以反映数据间得逻辑关系。 A.只能有1个 B.只能有2个 C.只能有3个 D.可以有多个 5.本书将采用 C 来描述算法。 A.自然语言 B.流程图(即框图) C.类C语言 D.C语言 6.有下面得算法段: for (i=0; i

《数据结构》教程c语言版

《数据结构》 第五版 清华大学自动化系 李宛洲 2004年5月

目录 第一章数据结构--概念与基本类型 (6) 1.1概述 (6) 1.1.1数据结构应用对象 (6) 1.1.2学习数据结构的基础 (7) 1.1.2.1 C语言中的结构体 (7) 1.1.2.2 C语言的指针在数据结构中的关联作用 (8) 1.1.2.3 C语言的共用体(union)数据类型 (12) 1.1.3数据结构定义 (15) 1.2线性表 (17) 1.2.1 顺序表 (18) 1.2.2 链表 (20) 1.2.2.1链表的基本结构及概念 (20) 1.2.2.2单链表设计 (22) 1.2.2.3单链表操作效率 (29) 1.2.2.4双链表设计 (30) 1.2.2.5链表深入学习 (32) 1.2.2.6稀疏矩阵的三元组与十字链表 (36) 1.2.3 堆栈 (41) 1.2.3.1堆栈结构 (41) 1.2.3.2基本操作 (42) 1.2.3.3堆栈与递归 (44) 1.2.3.4递归与分治算法 (45) 1.2.3.5递归与递推 (49) 1.2.3.6栈应用 (52) 1.2.4 队列 (57) 1.2.4.1队列结构 (57) 1.2.3.2队列应用 (59) 1.3非线性数据结构--树 (64) 1.3.1 概念与术语 (64) 1.3.1.1引入非线性数据结构的目的 (64) 1.3.1.2树的定义与术语 (65) 1.3.1.3树的内部节点与叶子节点存储结构问题 (66) 1.3.2 二叉树 (66) 1.3.2.1二叉树基本概念 (66) 1.3.2.2完全二叉树的顺序存储结构 (68) 1.3.2.3二叉树遍历 (69) 1.3.2.4二叉树唯一性问题 (71)

结构设计新手的七种学习方法(免费分享)

结构设计新手的七种学习方法 第一种武器:熟悉结构设计的任务和内容 如果你的职业规划是结构设计,了解民用建筑结构设计的深度很重要,起码要知道结构设计不同阶段的不同设计内容,这样可以做到有的放矢,心中有数。如果连起码的设计内容都不是这里缺一点就是那里漏一点,想不被审图办打回来都难! 结构新手必看--民用建筑结构设计深度及图样 https://www.360docs.net/doc/ed14798934.html,/forum.php?mod=viewthread&tid=35189&fromuid=991887 05G104民用建筑结构初步设计深度及图样 04G103民用建筑结构施工图设计深度及图样 第二种武器:扎实的结构理论基础知识要用结构理论武装自己的头脑,切忌盲目上阵: 大学本科的材料力学、结构力学、混凝土设计原理、工程结构抗震设计、土力学与地基基础等等这些和结构设计紧密相关的主干课程务必要重视。真正的高手一定是具备理论和实践相结合的素质,但如果这些理论不过关的话何谈理论与实践相结合呢?很多学生在学校的时候总是觉得学校的课程枯燥无味,不知道学这些知识和实际的设计有什么样的联系。其实当你真正地涉足设计的时候却往往发现:原来我们90%的设计总是可以从我们的大学课程中找到它的原型。我们很多学员都是在开始设计的过程中发现自己大学的主干课程学得不扎实然后恶补,与其亡羊补牢,不如未雨绸缪。如果你的职业规划是结构设计,这些和结构设计紧密相关的主干课程务是一个必须跨过去的坎,任何抱着侥幸心理而又想做好结构设计的思想都是不切实际的,在这个原则问题上是无法妥协也是没有捷径而言的。比如结构新人在画楼梯大样配筋时经常容易犯图一的错误,之所以犯这样的错误就是因为对钢筋和混凝土的材料特性不了解。

数据结构课程课后习题答案

《数据结构简明教程》练习题及参考答案 练习题1 1. 单项选择题 (1)线性结构中数据元素之间是()关系。 A.一对多 B.多对多 C.多对一 D.一对一 答:D (2)数据结构中与所使用的计算机无关的是数据的()结构。 A.存储 B.物理 C.逻辑 D.物理和存储 答:C (3)算法分析的目的是()。 A.找出数据结构的合理性 B.研究算法中的输入和输出的关系 C.分析算法的效率以求改进 D.分析算法的易懂性和文档性 答:C (4)算法分析的两个主要方面是()。 A.空间复杂性和时间复杂性 B.正确性和简明性 C.可读性和文档性 D.数据复杂性和程序复杂性 答:A (5)计算机算法指的是()。 A.计算方法 B. 排序方法 C.求解问题的有限运算序列 D.调度方法 答:C (6)计算机算法必须具备输入、输出和()等5个特性。 A.可行性、可移植性和可扩充性 B.可行性、确定性和有穷性 C.确定性、有穷性和稳定性 D.易读性、稳定性和安全性 答:B 2. 填空题 (1)数据结构包括数据的①、数据的②和数据的③这三个方面的内容。 答:①逻辑结构②存储结构③运算 (2)数据结构按逻辑结构可分为两大类,它们分别是①和②。 答:①线性结构②非线性结构 (3)数据结构被形式地定义为(D,R),其中D是①的有限集合,R是D上的②有限集合。

答:①数据元素 ②关系 (4)在线性结构中,第一个结点 ① 前驱结点,其余每个结点有且只有1个前驱结点;最后一个结点 ② 后继结点,其余每个结点有且只有1个后继结点。 答:①没有 ②没有 (5)在树形结构中,树根结点没有 ① 结点,其余每个结点有且只有 ② 个前驱结点;叶子结点没有 ③ 结点,其余每个结点的后继结点数可以是 ④ 。 答:①前驱 ②1 ③后继 ④任意多个 (6)在图形结构中,每个结点的前驱结点数和后继结点数可以是( )。 答:任意多个 (7)数据的存储结构主要有四种,它们分别是 ① 、 ② 、 ③ 和 ④ 存储结构。 答:①顺序 ②链式 ③索引 ④哈希 (8)一个算法的效率可分为 ① 效率和 ② 效率。 答:①时间 ②空间 3. 简答题 (1)数据结构和数据类型两个概念之间有区别吗? 答:简单地说,数据结构定义了一组按某些关系结合在一起的数组元素的集合。数据类型不仅定义了一组数据元素,而且还在其上定义了一组操作。 (2)简述线性结构、树形结构和图形结构的不同点。 答:线性结构反映结点间的逻辑关系是一对一的,树形线性结构反映结点间的逻辑关系是一对多的,图在结构反映结点间的逻辑关系是多对多的。 (3)设有采用二元组表示的数据逻辑结构S=(D,R),其中D={a ,b ,…,i },R={(a ,b ),(a ,c ),(c ,d ),(c ,f ),(f ,h ),(d ,e ),(f ,g ),(h ,i )},问相对于关系R ,哪些结点是开始结点,哪些结点是终端结点? 答:该逻辑结构为树形结构,其中a 结点没有前驱结点,称为根结点,b 、e 、g 、i 结点没有后继结点,是终端结点,也称为叶子结点。 (4)以下各函数是算法中语句的执行频度,n 为问题规模,给出对应的时间复杂度: T 1(n )=n log 2n -1000log 2n T 2(n )=3log 2n -1000log 2n T 3(n )=n 2-1000log 2n T 4(n )=2n log 2n -1000log 2n 答:T 1(n )=O(n log 2n ),T 2(n )=O( ),T 3(n )=O(n 2),T 4(n )=O(n log 2n )。 (5)分析下面程序段中循环语句的执行次数。 int j=0,s=0,n=100; do { j=j+1; s=s+10*j; } while (j

结构设计中常见问题及解决办法之一结构设计总则

结构设计中常见问题及解决办法之一结构设计总则结构设计中常见问题及解决办法之一 结构设计总则 目录、编制说明 一、结构设计总则 1.1总说明及图纸设计文件 1.2计算书完整性问题 1.3计算参数及荷载取值 二、地基处理及基础设计 三、钢结构 四、钢筋混凝土结构 五、结构加固 编制说明 1、根据现行国家有关规范、规程,对工程设计中由于设计人员的考虑不周和对规范、规程的理解不够全面,造成的一些不当做法和错误,以及在施工图设计文件审查中常出现的问题,进行汇总、整理、分析,并提出改进措施及依据,从而加强设计人员对规范及规程全面、准确的理解,避免类似错误的发生,合理和优化设计,提高设计质量。 2、主要编制依据 《建筑结构可靠度设计统一标准》GB50068-2001 《建筑工程抗震设防分类标准》GB50223-2008 《岩土工程勘察规范》GB50021-2001(2009年修订)

《人民防空地下室设计规范》GB50038-2005 《地下工程防水技术规范》GB50108-2008 《建筑结构荷载规范》GB50009-2012 《建筑地基基础设计规范》GB50007-2011 《建筑地基处理技术规范》JGJ79-2012J220-2012 《建筑桩基技术规范》JGJ94-2008 《建筑抗震设计规范》GB50011-2010 《混凝土结构设计规范》GB50010-2010 《钢结构设计规范》GB50017-2003 《门式刚架轻型房屋钢结构技术规范》GB51022-2015 《高层建筑混凝土结构技术规程》JGJ3-2010J186-2010 《建筑工程设计文件编制深度规定》建质函[2016]247号 《施工图设计文件审查要点》建质[2013]87号 《民用建筑工程设计常见问题分析及图示》图集 《建筑结构设计问答及分析》 《高层建筑混凝土结构技术规程应用及分析》 《建筑抗震设计规范应用与分析》 《建筑地基基础设计方法及实例分析》 《PKPM产品使用手册及技术条件》 《盈建科产品使用手册及技术条件》 一、结构设计总则 1.1总说明及图纸设计文件 (1)设计依据和质量验收应遵循的工程建设标准的名称、编号与版本号正确性。

数据结构教程李春葆课后答案第9章查找

第9章 查找 教材中练习题及参考答案 1. 设有5个数据do 、for 、if 、repeat 、while ,它们排在一个有序表中,其查找概率分别是p 1=0.2,p 2=0.15,p 3=0.1,p 4=0.03,p 5=0.01。而查找它们之间不存在数据的概率分别为q 0=0.2,q 1=0.15,q 2=0.1,q 3=0.03,q 4=0.02,q 5=0.01,该有序表如下: (1)试画出对该有序表分别采用顺序查找和折半查找时的判定树。 (2)分别计算顺序查找的查找成功和不成功的平均查找长度。 (3)分别计算折半查找的查找成功和不成功的平均查找长度。 答:(1)对该有序表分别采用顺序查找和折半查找时的判定树分别如图9.2和9.3所示。 (2)对于顺序查找,成功查找到第i 个元素需要i 次比较,不成功查找需要比较的次数为对应外部结点的层次减1: ASL 成功=(1p 1+2p 2+3p 3+4p 4+5p 5)=0.97。 ASL 不成功=(1q 0+2q 1+3q 2+4q 3+5q 4+5q 5)=1.07。 (3)对于折半查找,成功查找需要比较的次数为对应内部结点的层次,不成功查找需要比较的次数为对应外部结点的层次减1: ASL 成功=(1p 3+2(p 1+p 4)+3(p 2+p 5))=1.04。 ASL 不成功=(2 q 0 q 5

图9.3 有序表上折半查找的判定树 2. 对于A [0..10]有序表,在等概率的情况下,求采用折半查找法时成功和不成功的平均查找长度。对于有序表(12,18,24,35,47,50,62,83,90,115,134),当用折半查找法查找 90时,需进行多少次查找可确定成功;查找47时需进行多少次查找可确定成功;查找100时,需进行多少次查找才能确定不成功。 答:对于A [0..10]有序表构造的判定树如图9.4(a )所示。因此有: ASL 成功= 114 4342211?+?+?+?=3 ASL 不成功= 12 4 834?+?=3.67 对于题中给定的有序表构造的判定树如图9.4(b )所示。查找 90时,关键字比较次序是50、90,比较2次。查找47时,关键字比较次序是50、24、35、47,比较4次。查找100时,关键字比较次序是50、90、115,比较3次。 图9.4 两棵判定树 3. 有以下查找算法: int fun(int a[],int n,int k) (a ) (b )

结构设计常用数据表格

建筑结构安全等级 2 纵向受力钢筋混凝土保护层最小厚度(mm) 不同根数钢筋计算截面面积(mm2)

板宽1000mm内各种钢筋间距时钢筋截面面积表(mm2) 每米箍筋实配面积 钢筋混凝土结构构件中纵向受力钢筋的最小配筋百分率(%) 框架柱全部纵向受力钢筋最小配筋百分率(%)

框架梁纵向受拉钢筋的最小配筋白分率(%) 柱箍筋加密区的箍筋最小配箍特征值λν(ρν=λνf/f)

受弯构件挠度限值 注:1 表中lo为构件的计算跨度; 2 表中括号内的数值适用于使用上对挠度有较高要求的构件; 3 如果构件制作时预先起拱,且使用上也允许,则在验算挠度时,可将计算所得的挠度值减去起拱值;对预应力混凝土构件,尚可减去预加力所产生的反拱值; 4 计算悬臂构件的挠度限值时,其计算跨度lo按实际悬臂长度的2倍取用。

注: 1 表中的规定适用于采用热轧钢筋的钢筋混凝土构件和采用预应力钢丝、钢绞线及热处理钢筋的预应力混凝土构件;当采用其他类别的钢丝或钢筋时,其裂缝控制要求可按专门标准确定; 2 对处于年平均相对湿度小于60%地区一类环境下的受弯构件,其最大裂缝宽度限值可采用括号内的数值; 3 在一类环境下,对钢筋混凝土屋架、托架及需作疲劳验算的吊车梁,其最大裂缝宽度限值应取为0.2mm;对钢筋混凝土屋面梁和托梁,其最大裂缝宽度限值应取为0.3mm; 4 在一类环境下,对预应力混凝土屋面梁、托梁、屋架、托架、屋面板和楼板,应按二级裂缝控制等级进行验算;在一类和二类环境下,对需作疲劳验算的须应力混凝土吊车梁,应按一级裂缝控制等级进行验算; 5 表中规定的预应力混凝土构件的裂缝控制等级和最大裂缝宽度限值仅适用于正截面的验算;预应力混凝土构件的斜截面裂缝控制验算应符合本规范第8章的要求; 6 对于烟囱、筒仓和处于液体压力下的结构构件,其裂缝控制要求应符合专门标准的有关规定; 7 对于处于四、五类环境下的结构构件,其裂缝控制要求应符合专门标准的有关规定; 8 表中的最大裂缝宽度限值用于验算荷载作用引起的最大裂缝宽度。 梁内钢筋排成一排时的钢筋最多根数

数据结构课程设计题目(1)

数据结构课程设计题目 1.表达式求值 问题描述: 一个算术表达式是由操作数(operand)、运算符(operator)和界限符(delimiter)组成的。假设操作数是正整数,运算符只含加减乘除等四种运算符,界限符有左右括号和表达式起始、结束符“#”,如:#(7+15)*(23-28/4)#。引入表达式起始、结束符是为了方便。编程利用“算符优先法”求算术表达式的值。 基本要求: (1)从键盘读入一个合法的算术表达式,输出正确的结果。 (2)显示输入序列和栈的变化过程。 选作内容: (1)扩充运算符集合。 (2)引入变量操作数。 (3)操作数类型扩充到实数。 2. 简单的员工管理系统 问题描述: 每个员工的信息包括编号、姓名、性别、出生年月、学历、职务、电话、住址等。系统的功能如下。 实习要求: (1)查询:按特定条件查找员工。 (2)修改:按编号对某个员工的某项信息进行修改。 (3)插入:加入新员工的信息。 (4)删除:按编号删除已离职的员工的信息。 (5)排序:按特定条件对所有员工的信息进行排序。 3. 迷宫问题 问题描述: 迷宫实验是取自心理学的一个古典实验。在该实验中,把一只老鼠从一个无顶大盒子的门放入,在盒中设置了许多墙,对行进方向形成了多处阻挡。盒子仅有一个出口,在出口处放置一块奶酪,吸引老鼠在迷宫中寻找道路以到达出口。对同一只老鼠重复进行上述实验,一直到老鼠从入口到出口,而不走错一步。老鼠经多次实验终于得到它学习走迷宫的路线。设计一个计算机程序对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。 实现提示: 可以利用一个二维数组maze[i][j]表示迷宫,其中1<=i<=m,1<=j<=n,m和n分别代表迷宫的行数和列数。数组元素值为1表示该位置是墙壁,不能通行;元素值为0表示该位置是通路。假定从maze[1][1]出发,出口位于maze[m][n],移动方向可以是8个方向(东、东南、南、西南、西、西北、北和东北)。计算机解迷宫时,通常用的是“穷举求解”的方法,即从入口出发,顺某一方向向前探索,若能走通,则继续往前走;否则沿原路退回,换一个方向再继续探索,直至所有可能的通路都探索到为止。为了保证在任何位置上都能沿原路退回,需要用一个后进先出的栈结构来保存从入口到当前位置的路径。 4.最小生成树的两种算法 要求:任意创建一个图,分别用Prime算法和kruskal算法,求出该图的最

相关文档
最新文档