习题三和上机答案Word格式.doc
- 文档编号:14176115
- 上传时间:2022-10-19
- 格式:DOC
- 页数:13
- 大小:83KB
习题三和上机答案Word格式.doc
《习题三和上机答案Word格式.doc》由会员分享,可在线阅读,更多相关《习题三和上机答案Word格式.doc(13页珍藏版)》请在冰豆网上搜索。
#include"
stdio.h"
#defineDataTypechar
#definesqstack_maxsize40
typedefstructsqstack
{DataTypedata[sqstack_maxsize];
inttop;
}SqStackTp;
intInitStack(SqStackTp*sq)
{sq->
top=0;
return
(1);
}
intPush(SqStackTp*sq,DataTypex)
{
if(sq->
top==sqstack_maxsize-1)
{printf("
栈满"
);
return(0);
else
{sq->
top++;
sq->
data[sq->
top]=x;
}
intPop(SqStackTp*sq,DataType*x)
if(sq->
top==0){printf("
下溢"
else{*x=sq->
top];
top--;
intEmptyStack(SqStackTp*sq)
top==0)return
(1);
elsereturn(0);
/*主函数*/
voidmain()
{SqStackTpsq;
DataTypech;
InitStack(&
sq);
for(ch='
A'
;
ch<
='
+12;
ch++)
{Push(&
sq,ch);
printf("
%c"
ch);
printf("
\n"
while(!
EmptyStack(&
sq))
{Pop(&
sq,&
ch);
printf("
}
链表:
#definedatatypechar
#definesizesizeof(structnode)
typedefstructnode
{datatypedata;
structnode*next;
}*LStackTp;
voidInitStack(LStackTp*ls)
*ls=NULL;
voidPush(LStackTp*ls,datatypex)
{LStackTpp;
p=(LStackTp)malloc(size);
p->
data=x;
next=*ls;
*ls=p;
intPop(LStackTp*ls,datatype*x)
if((*ls)!
=NULL)
{p=*ls;
*x=p->
data;
*ls=(*ls)->
next;
free(p);
return
(1);
}elsereturn(0);
intEmptyStack(LStackTpls)
if(ls==NULL)return
(1);
{LStackTpls;
datatypech;
InitStack(ls);
ls,ch);
ls->
data);
EmptyStack(ls))
ls,&
}
⒊3有两个栈A,B这两个栈中分别存储这一个升序数列,现要求编写算法把这两个栈中的数合成一个升序队列
linkmerge(linka,linkb)
{linkh,s,m,n,t;
h=(cnode*)malloc(sizeof(cnode));
h->
next=NULL;
s=h;
m=a;
n=b;
while(m->
next&
&
n->
next)
{if(m->
next->
data<
data)
{t=m->
m->
next=t->
t->
next=s->
s->
next=t;
s=t;
}
elseif(m->
data==n->
{t=m->
m->
n=n->
t->
s->
s=t;
}
else
{t=n->
n->
}
{t=m->
m->
t->
s->
s=t;
while(n->
{t=n->
n->
t->
s->
s=t;
free(m);
free(n);
returnh;
⒊4设两个栈共享一个数组空间,其类型定义见⒊⒈2节,试写出两个栈公用的读栈顶元算法elemtptop_dustack(dustacktpds,p;
inti);
进栈操作算法voidpush_dustack(dustacktpds,p;
inti,elemtpx);
及出栈算法elemtppop_dustack(dustacktpds,p;
inti)。
其中i的取值是1或2,用以指示栈号。
读栈顶元函数
elemtptop_sqstack(s:
sqstacktp){
if(s.top==0)
return(null);
else
return(s.elem[s.top]);
}
进栈操作
voidpush_sqstack(sqstacktps,elemtpx){
若栈s未满,将元素x压入栈中;
否则,栈的状态不变并给出出错信息
if(s.top==maxsize)
printf(“Overflow”);
else{
s.top++;
栈顶指针加1
s.elem[s.top]=xx进栈
}
出栈函数
elemtppop_sqstack(sqstacktps){
若栈s不空,则删去栈顶元素并返回元素值,否则返回空元素NULL
if(s.top==0)
return(null);
s.top--;
栈顶指针减1
teturn(s.elem[s.top+1]);
返回原栈顶元素值
}
⒊5假设以数组sequ(0..m-1)存放循环队列元素,同时设变量rear和quelen分别指示循环队列中队尾元素和内含元素的个数。
试给出此循环队列的队满条件,并写出相应的入队列和出队列的算法(在出队列的算法中要返回队头元素)。
队满的条件
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 习题 上机 答案