北科大数据结构上机题代码资料Word格式文档下载.docx
- 文档编号:16636443
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:41
- 大小:23KB
北科大数据结构上机题代码资料Word格式文档下载.docx
《北科大数据结构上机题代码资料Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《北科大数据结构上机题代码资料Word格式文档下载.docx(41页珍藏版)》请在冰豆网上搜索。
c=(fflush(stdin),scanf("
%f"
&
b));
//判断输入的是否是整数
a=(int)b;
if(c!
=1||a!
=b||a>
-2^16||a<
2^16-1)printf("
非法输入!
请重新输入!
\n"
);
}while(c!
2^16-1);
while(a!
=0)
P=(Link)malloc(sizeof(Linknode));
//申请新节点
P->
data=a;
//存入数据
r->
next=P;
//新节点链入表尾
r=P;
}
r->
next=NULL;
//将尾节点的指针域置空
return(H);
//返回已创建的头节点
}
LinkAdjmax(LinkH)//求链表中相邻两节点data值之和为最大的第一节点的指针的算法
Linkp,p1,q;
inti,j;
p=p1=H->
next;
if(p1==NULL)return(p1);
//表空返回
q=p->
if(q==NULL)return(p1);
//表长=1时返回
i=p->
data+q->
data;
//相邻两节点data值之和
while(q->
next)
p=q;
q=q->
//取下一对相邻节点的指针
j=p->
if(j>
i)
{
p1=p;
i=j;
//取和为最大的第一节点指针
}
return(p1);
voidmain()//主函数
{
LinkA,B,p,q;
inta,b;
printf("
请输入一组整数(以0为结束符,数之间回车):
p=A=Createlist();
//创建新链表
B=Adjmax(A);
//求链表中相邻两节点data值之和为最大的第一节点的指针
a=(int)(B->
data);
//取第一节点的data值
printf("
第一节点的data值为:
%d\n"
a);
while(p->
next)//释放链表空间
q=p;
p=p->
free(q);
free(p);
是否继续输入下一组整数:
是:
1,否:
0\n"
scanf("
%d"
b);
}while(b);
上机题2.实现算术表达式求值程序(栈的运用)。
设操作数:
0,1,2,……,8,9(可扩充);
运算符:
+,—,*,/,(,),#(#号为结束)。
输入中缀表达式,如:
5+(4—2)*3#,将其转换成后缀表达式:
542—3*+#,
然后计算,本例结果为11。
程序结构:
两套:
Clearstack(S)、Emptystack(S)、Getstop(S)、Push(S)、Pop(S);
中缀到后缀转换的函数:
Mid-post(E[n],B[n]);
后缀表达式求值的函数:
Postcount(B[n]);
main()
{变量说明;
输入中缀表达式,存入E[n];
调用Mid-post(E,B);
调用Postcount(B);
打印表达式结果;
停止}
上机题2:
string.h>
typedefstructnode
chardata;
}snode,*slink;
typedefstructnode1
intdata;
structnode1*next;
}snode1,*slink1;
voidClearstack(slinks)//置栈空
s=NULL;
intEmptystack(slinks)//判断栈是否为空
if(s==NULL)return
(1);
//栈空返回1
elsereturn(0);
//栈非空返回0
}
charGetstop(slinks)//取栈顶元素
if(s!
=NULL)return(s->
return(0);
voidPush(slink*s,charx)//元素x进栈
slinkp;
p=(slink)malloc(sizeof(snode));
//生成进栈p节点
p->
data=x;
//存入新元素
next=*s;
//p节点作为新的栈顶链入
*s=p;
charPop(slink*s)//出栈
charx;
if(Emptystack(*s))return(-1);
//栈空,返回-1
else
x=(*s)->
p=*s;
*s=(*s)->
free(p);
return(x);
//成功
voidPush1(slink1*s,intx)//元素x进栈
slink1p;
p=(slink1)malloc(sizeof(snode1));
intPop1(slink1*s)//出栈
intx;
if(Emptystack1(*s))return(-1);
intEmptystack1(slink1s)//判断栈是否为空
voidClearstack1(slink1s)//置栈空
intGetstop1(slink1s)//取栈顶元素
intPrecede(charx,chary)
switch(x)
case'
#'
:
//case'
('
a=0;
break;
+'
case'
-'
a=1;
*'
/'
a=2;
switch(y)
b=1;
b=2;
//case'
b=3;
if(a>
=b)return
(1);
elsereturn(0);
voidMid_post(charE[],charB[])//中缀表达式B到后缀表达式E的转换
inti=0,j=0;
inta;
slinks=NULL;
//置空栈
Clearstack(s);
Push(&
s,'
//结束符入栈
{
x=B[i++];
//扫描当前表达式分量x
switch(x)
{
'
{
while(!
Emptystack(s))
{
E[j++]='
;
//栈非空时
E[j++]=Pop(&
s);
}
}break;
)'
while(Getstop(s)!
='
)
}//反复出栈直到遇到'
Pop(&
//退掉'
case'
while(Precede(Getstop(s),x))//栈顶运算符(Q1)与x比较
{
E[j++]='
E[j++]=Pop(&
}
//E[j++]='
Push(&
s,x);
//Q1<
x时,x进栈
default:
E[j++]=x;
}
}while(x!
E[j]='
\0'
intEcount(charE[])//后缀表达式求值
inti=0,g=0,k=0,d=0,d1,g1;
intz,a,b;
slink1s=NULL;
while(E[i]!
x=E[i];
b=Pop1(&
a=Pop1(&
z=a+b;
Push1(&
s,z);
z=a-b;
z=a*b;
z=a/b;
g=0;
g1=0;
while(E[i]!
g1=E[i]-'
0'
g=g*10+g1;
i++;
}
Push1(&
s,g);
i++;
if(!
Emptystack1(s))return(Getstop1(s));
Clearstack1(s);
intpd(charB[])
{inti=0,c,j,k;
c=strlen(B);
while(B[i]!
switch(B[i])
1'
2'
3'
4'
5'
6'
7'
8'
9'
{j=i+1;
if(B[j]=='
while(B[j]=='
)j++;
switch(B[j])
printf("
1非法输入!
return(0);
}break;
j=i-1;
while(B[j]=='
)j--;
switch(B[j])
case'
2非法输入!
}
k=i+1;
while(B[k]=='
)k++;
switch(B[k])
3非法输入!
4非法输入!
5非法输入!
}break;
switch(B[j])
case'
6非法输入!
7非法输入!
default:
8非法输入!
i++;
if(B[0]=='
表达式为空!
elseif(B[c-1]!
9非法输入!
}
voidmain()
inta,b,c,d;
charB[100],E[100];
do
请输入中缀表达式:
B[100]=fflush(stdin);
gets(B);
while(B[0]=='
B[100]=fflush(stdin);
b=pd(B);
}while(b==0);
Mid_post(E,B);
后缀表达式为:
%s\n"
E);
a=Ecount(E);
结果=%d\n"
是否继续?
1否:
c);
}while(c==1);
上机题3.实现链式队列运算程序(队列的运用)。
Clearqueue(q)、Emptyqueue(q)、Enqueue(q)、Dequeue(q);
}
上机题3:
#include<
typedefstructnode
}Qnode,*Qlink;
typedefstruct
Qnode*front,*rear;
}linkqueue;
voidClearqueue(linkqueue*q)//清空队列
q->
front->
rear=q->
front;
voidCreatqueue(linkqueue*q)//创建队列
front=(Qlink)malloc(sizeof(Qnode));
intEmptyqueue(linkqueue*q)//判断队列是否为空
if(q->
front==q->
rear)return
(1);
voidEnqueue(linkqueue*q,chare)//元素进队
Qlinkp;
p=(Qlink)malloc(sizeof(Qnode));
data=e;
rear->
next=p;
rear=p;
charDequeue(linkqueue*q)//元素出队
if(Emptyqueue(q))return(NULL);
p=q->
q->
front=p->
return(q->
chara,b;
intc;
linkqueueq;
Creatqueue(&
q);
do{
a=getchar();
switch(a)
if(Emptyqueue(&
q))
printf("
队列为空!
printf("
请继续输入!
c=1;
else
b=Dequeue(&
printf("
%c出队\n"
b);
@'
if(Emptyqueue(&
{printf("
return;
{
全部元素出队:
while(Emptyqueue(&
q)!
=1)
{
b=Dequeue(&
%c"
}
return;
\n'
default:
{Enqueue(&
q,a);
}break;
}while(c);
上机题4.设电文字符集D及各字符出现的概率F如下:
D={a,b,c,d,e,f,g,h}(字符数n=8)
F={5,29,7,8,14,23,3,11}(%)
编写完成下列功能的程序:
①构造关于F的Huffman树;
②求出并打印D总各字符的Huffman编码。
构造Huffman树的函数:
Huffman_tree(H[m+1]);
求Huffman编码的函数:
Huffman_code(code[n+1]);
输入字符集D及频率F;
调用Huf
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 北科大 数据结构 上机 代码 资料
![提示](https://static.bdocx.com/images/bang_tan.gif)