国开作业《数据结构本》提交实验报告参考248Word文档下载推荐.docx
《国开作业《数据结构本》提交实验报告参考248Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《国开作业《数据结构本》提交实验报告参考248Word文档下载推荐.docx(8页珍藏版)》请在冰豆网上搜索。
inttop;
//栈顶指针
}SeqStack;
//定义栈
ElemTypeelem[MaxSize];
intfront,rear;
//队首和队尾指针
}SqQueue;
//定义队列
//---初始栈函数
voidInitStack(SeqStack*&
s)
s=(SeqStack*)malloc(sizeof(SeqStack));
s->
top=-1;
}
//----进栈函数
intPush(SeqStack*&
s,ElemTypee)
if(s->
top==MaxSize-1)
return0;
top++;
data[s->
top]=e;
return1;
//---显示栈函数
voidDispStack(SeqStack*s)
inti;
for(i=s->
top;
i>
=0;
i--)
printf("
%c"
s->
data[i]);
printf("
\n"
);
//---显示栈底元素
voidDispBottomStack(SeqStack*s)
data[0]);
//先进后出,栈底元素为第一个元素,即data[0]
//---判空栈函数
intStackEmpty(SeqStack*s)
return(s->
top==-1);
//---出栈函数
intPop(SeqStack*&
s,ElemType&
e)
top==-1)
e=s->
top];
top--;
//---初始队列函数
voidInitQueue(SqQueue*&
q)
q=(SqQueue*)malloc(sizeof(SqQueue));
q->
front=q->
rear=0;
//---入队列函数
intInQueue(SqQueue*&
q,ElemTypee)
if((q->
rear+1)%MaxSize==q->
front)//队满
rear=(q->
rear+1)%MaxSize;
elem[q->
rear]=e;
//---出队列函数
intOutQueue(SqQueue*&
q,ElemType&
if(q->
front==q->
rear)//队空
front=(q->
front+1)%MaxSize;
e=q->
front];
//---判空队列函数
intQueueEmpty(SqQueue*q)
return(q->
rear);
//-----主程序
voidmain()
ElemTypee;
SeqStack*s;
(1)初始化栈s\n"
InitStack(s);
(2)栈为%s\n"
(StackEmpty(s)?
"
空"
:
非空"
));
(3)依次进栈元素a,b,c,d,e\n"
Push(s,'
a'
//入栈元素1
b'
//入栈元素2
c'
//入栈元素3
d'
//入栈元素4
e'
//入栈元素5
(4)栈为%s\n"
(5)从栈顶到栈底元素:
DispStack(s);
(6)栈底元素为:
DispBottomStack(s);
(7)出栈/入队列序列:
SqQueue*q;
InitQueue(q);
while(!
StackEmpty(s))
{
Pop(s,e);
//出栈
e);
InQueue(q,e);
//入队
}
(8)栈为%s,"
队列为%s\n"
(QueueEmpty(q)?
(9)出队列/入栈序列:
QueueEmpty(q))
{OutQueue(q,e);
//出队
Push(s,e);
//入栈
(10)栈为%s,"
free(q);
//释放队列
(11)从栈顶到栈底元素:
free(s);
//释放栈
程序运行结果如下:
2.2递归程序设计
给定一个5位的十进制正整数,用递归法分别编制程序:
(1)要求从低位到高位逐次输出各位数字。
(2)要求从高位到低位逐次输出各位数字。
(1)比较题中两种不同要求的递归程序设计和执行过程差别。
(2)正确理解递归程序的执行过程。
(3)显示计算结果。
【实验步骤】
点击“文件”→“新建”→对话窗口中“文件”→“c++SourceFile”→在“文件名”中
(2)输入“X1.cpp”→在“位置”中选择储存路径为“桌面”→“确定”,
(3)输入程序代码
#include<
math.h>
voidout(intn,inti)//从高位到低位输出函数
intx,y;
y=int(pow(10,i));
if(n!
=0)
x=n/y;
n=n-x*y;
printf("
%d"
x);
elseprintf("
0"
i--;
if(i>
=0)out(n,i);
voidout1(intm,intj)//从低位到高位输出函数
intx,z;
if(m!
x=int(m/10);
z=m-x*10;
m=x;
z);
j--;
if(j>
=0)out1(m,j);
intm,n,o,x,i,j;
输入需要排列的数字:
scanf("
%d"
&
o);
m=n=o;
x=n;
i=-1;
while(x!
x=x/10;
i++;
}//求出i为十进制正整数位数
j=i;
从高位到低位逐次输出各位数字:
out(n,i);
从低位到高位逐次输出各位数字:
out1(m,j);
程序运行结果如下:
实验结论:
栈和队列是运算受限制的线性表
栈:
后进先出(LIFO)
例:
进栈b,c,d,e,f出栈可能为f,e,d,c,b;
b,c,d,e,f;
c,b,e,d,f•••但不可能是e,d,f,b,c
队列:
先进先出(FIFO)
例:
入队1,2,3,4,5出队1,2,3,4,5