大连理工大学数据结构(一)上机作业答案张老师文档格式.doc

上传人:wj 文档编号:6871533 上传时间:2023-05-07 格式:DOC 页数:12 大小:68.50KB
下载 相关 举报
大连理工大学数据结构(一)上机作业答案张老师文档格式.doc_第1页
第1页 / 共12页
大连理工大学数据结构(一)上机作业答案张老师文档格式.doc_第2页
第2页 / 共12页
大连理工大学数据结构(一)上机作业答案张老师文档格式.doc_第3页
第3页 / 共12页
大连理工大学数据结构(一)上机作业答案张老师文档格式.doc_第4页
第4页 / 共12页
大连理工大学数据结构(一)上机作业答案张老师文档格式.doc_第5页
第5页 / 共12页
大连理工大学数据结构(一)上机作业答案张老师文档格式.doc_第6页
第6页 / 共12页
大连理工大学数据结构(一)上机作业答案张老师文档格式.doc_第7页
第7页 / 共12页
大连理工大学数据结构(一)上机作业答案张老师文档格式.doc_第8页
第8页 / 共12页
大连理工大学数据结构(一)上机作业答案张老师文档格式.doc_第9页
第9页 / 共12页
大连理工大学数据结构(一)上机作业答案张老师文档格式.doc_第10页
第10页 / 共12页
大连理工大学数据结构(一)上机作业答案张老师文档格式.doc_第11页
第11页 / 共12页
大连理工大学数据结构(一)上机作业答案张老师文档格式.doc_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

大连理工大学数据结构(一)上机作业答案张老师文档格式.doc

《大连理工大学数据结构(一)上机作业答案张老师文档格式.doc》由会员分享,可在线阅读,更多相关《大连理工大学数据结构(一)上机作业答案张老师文档格式.doc(12页珍藏版)》请在冰点文库上搜索。

大连理工大学数据结构(一)上机作业答案张老师文档格式.doc

L.elem[i]);

}

//输出顺序表中的元素

voidListOutput_Sq(SqListL){

inti,n;

n=L.length;

%2d"

L.elem[i]);

//顺序表逆置

voidReverseList_Sq(SqList&

ElemTypep;

n/2;

{

p=L.elem[i];

L.elem[i]=L.elem[n-i-1];

L.elem[n-i-1]=p;

voidmain(){

SqListL;

InitList_Sq(L);

ListInput_Sq(L);

ListOutput_Sq(L);

ReverseList_Sq(L);

printf("

\n"

输出结果为:

2.从键盘读入n个整数(升序),请编写算法实现:

(1)CreateList():

建立带表头结点的单链表;

(2)PrintList():

显示单链表,(形如:

H->

10->

20->

30->

40);

(3)InsertList():

在有序单链表中插入元素x;

(4)ReverseList():

单链表就地逆置;

(5)DelList():

在有序单链表中删除所有值大于mink且小于maxk的元素。

选作:

使用文本菜单完成功能选择及执行。

参考答案:

typedefstructLNode{

ElemTypedata;

structLNode*next;

}LNode,*LinkList;

voidCreateList(LinkList&

L,intn){

inti;

LNode*p,*q;

L=(LinkList)malloc(sizeof(LNode));

L->

next=NULL;

q=L;

请输入所要建立的单链表所包含的元素:

i++){

p=(LinkList)malloc(sizeof(LNode));

scanf("

p->

data);

p->

q->

next=p;

q=p;

voidPrintList(LinkListL){

LNode*p;

p=L->

next;

while(p){

p->

p=p->

voidInsertList(LinkListL,ElemTypem){

LNode*p,*q,*s;

p=L;

q=L->

while(q&

&

q->

data<

m){

p=q;

q=q->

if(q){

s=(LinkList)malloc(sizeof(LNode));

s->

data=m;

next=q;

next=s;

else{

voidReverseList(LinkList&

if(L->

next&

L->

next->

next){

p=L->

q=p->

while(q){

p=q;

q=q->

p->

next=L->

L->

}

voidDeleteList(LinkList&

L,ElemTypemink,ElemTypemaxk){

LNode*p=L,*q;

while(p->

=mink)

q=p;

maxk)

p->

LinkListL;

intn,number;

ElemTypee,mink,maxk;

do{

*********************************\n"

建立单链表请按1.\n"

显示单链表请按2.\n"

有序插入新元素请按3.\n"

单链表就地逆置请按4.\n"

删除大于mink且小于maxk的所有元素请按5.\n"

退出请按0.\n"

\n请选择操作:

number);

switch(number){

case1:

printf("

请输入单链表中的节点个数:

scanf("

CreateList(L,n);

break;

case2:

要执行本操作请先建立单链表,请输入单链表中的节点个数:

printf("

单链表为:

PrintList(L);

case3:

请输入有序表中插入的值:

scanf("

e);

InsertList(L,e);

PrintList(L);

case4:

printf("

单链表逆置:

ReverseList(L);

case5:

请输入mink和maxk:

%d%d"

mink,&

maxk);

DeleteList(L,mink,maxk);

}while(number!

=0);

第二次作业

栈采用顺序栈存储,试设计算法实现将表达式转换成后缀表达式输出。

例如,输入表达式:

a+b/c-(d*e+f)*g

输出其后缀表达式:

abc/+de*f+g*-

string.h>

math.h>

#defineOVER-2

#defineture1

#definefalse0

#defineSTACK_INIT_SIZE100

#defineSTACKINCREMENT10

typedefcharSElemType;

typedefcharElemType;

typedefstruct{

SElemType*base;

SElemType*top;

intstacksize;

}SqStack;

//定义结构

intInitStack(SqStack&

S){

S.base=(ElemType*)malloc(STACK_INIT_SIZE*sizeof(ElemType));

if(!

S.base)exit(OVER);

S.top=S.base;

S.stacksize=STACK_INIT_SIZE;

returnOK;

}//建栈

intPush(SqStack&

S,SElemTypee){

if(S.top-S.base>

=S.stacksize)

{S.base=(ElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(ElemType));

if(!

S.top=S.base+S.stacksize;

S.stacksize+=STACKINCREMENT;

*S.top++=e;

}//插入

intGetTop(SqStack&

S,SElemType&

e){

if(S.top==S.base)returnERROR;

e=*(S.top-1);

}//获取栈顶元素

intPop(SqStack&

if(S.top==S.base)returnERROR;

e=*--S.top;

returnOK;

}//删除栈顶并用e返回值

intStackEmpty(SqStackS){

if(S.top==S.base)

returnture;

else

returnfalse;

intPass(charsuffix[],SElemTypech)

{

char*p;

p=suffix;

while(*p!

='

\0'

p++;

*p=ch;

*(p+1)='

;

return0;

}//把操作数ch传进数组suffix

voidadd(charexp[])

{

char*p;

p=exp;

while(*p!

='

++p;

*p='

#'

*(p+1)='

}//在表达式结尾加结束符

voiddel(charsuffix[])

{

p=suffix;

p++;

}//将字符串结尾附成\0

intPrecede(charc)

{

if(c=='

*'

||c=='

/'

return2;

if(c=='

+'

-'

return1;

('

)'

return-1;

else

return-2;

}//优先级比较

voidtransform(charsuffix[],charexp[])

char*p,ch,c;

p=exp;

ch=*p;

SqStackS;

InitStack(S);

Push(S,'

while(!

StackEmpty(S))

if(ch>

a'

ch<

z'

{

Pass(suffix,ch);

else

switch(ch)

{

case'

:

Push(S,ch);

break;

Pop(S,c);

while(c!

{

Pass(suffix,c);

Pop(S,c);

}

default:

if(ch=='

while(!

{

Pop(S,c);

Pass(suffix,c);

}

else

GetTop(S,c);

while(Precede(c)>

=Precede(ch))

GetTop(S,c);

Push(S,ch);

}

if(ch!

ch=*++p;

}//后缀表达式转化

intmain()

charsuffix[100];

suffix[0]='

charexp[100];

printf("

请输入一个表达式:

gets(exp);

add(exp);

transform(suffix,exp);

del(suffix);

后缀表达式为:

%s\n"

suffix);

第三次作业

二叉树采用二叉链表存储,试设计算法实现:

1.CreateBT(BiTree&

T):

从键盘输入二叉树的先序遍历序列字符串(以”#”代表空结点),建立其二叉链表;

如输入:

AB#D##CE#F###则建立如下图所示二叉树的二叉链表

2.ExchangeBT(BiTreeT):

设计递归算法实现二叉树中所有结点的左右孩子交换;

3.CountLeaf(BiTreeT,TElemTypex,int&

count):

统计以值为x的结点为根的子树中叶子结点的数目;

4.DispBiTree(BiTreeT,intlevel):

按树状打印二叉树。

B

C

F

A

E

D

打印得到:

#C

###F

##E

##D

#B

提示:

对于根为T,层次为level的子树:

①打印其下一层(level+1层)右子树;

②打印根结点;

③打印其下一层(level+1层)左子树;

*结点左边的’#’个数为其层次数*

typedefstructBiTNode{

chardata;

structBiTNode*lchild,*rchild;

}BiTNode,*BiTree;

//输入先序序列,创建二叉树的二叉链表

voidCreateBT(BiTree&

T){

charch;

%c"

ch);

if(ch=='

T=NULL;

T=(BiTNode*)malloc(sizeof(BiTNode));

T->

data=ch;

CreateBT(T->

lchild);

rchild);

//交换二叉树中结点的左右孩子

voidExchangeBT(BiTree&

BiTreetemp;

if(T){

temp=T->

lchild;

lchild=T->

rchild;

lchild=temp;

ExchangeBT(T->

//查找值为x的结点

BiTreeSearchTree(BiTreeT,charx){

BiTreeNTree;

if(T->

data==x)

returnT;

NTree=SearchTree(T->

lchild,x);

if(NTree==NULL)

NTree=SearchTree(T->

rchild,x);

returnNTree;

returnNULL;

//统计一x为根的子树中叶子结点的个数

voidLeafCount(BiTreeT,int&

count){

if((T->

lchild==NULL)&

(T->

rchild==NULL))

count++;

LeafCount(T->

lchild,count);

rchild,count);

//按树状打印输出二叉树的元素,level表示结点的层次

voidPrintBiTree(BiTreeT,intlevel){

PrintBiTree(T->

lchild,level+1);

for(i=0;

level;

#"

%c\n"

T->

rchild,level+1);

BiTreeT,SecT;

charSecch;

intcount=0;

输入先序序列建立二叉树:

CreateBT(T);

二叉树为:

PrintBiTree(T,0);

交换结点的左右孩子\n"

ExchangeBT(T);

\n此时二叉树为:

输入要统计叶子结点个数的子树的根:

fflush(stdin);

//清理缓存

Secch);

SecT=SearchTree(T,Secch);

LeafCount(SecT,count);

叶子结点数为:

%d\n"

count);

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2