国开作业《数据结构本》提交实验报告参考248.docx

上传人:b****2 文档编号:1902895 上传时间:2022-10-25 格式:DOCX 页数:8 大小:58.36KB
下载 相关 举报
国开作业《数据结构本》提交实验报告参考248.docx_第1页
第1页 / 共8页
国开作业《数据结构本》提交实验报告参考248.docx_第2页
第2页 / 共8页
国开作业《数据结构本》提交实验报告参考248.docx_第3页
第3页 / 共8页
国开作业《数据结构本》提交实验报告参考248.docx_第4页
第4页 / 共8页
国开作业《数据结构本》提交实验报告参考248.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

国开作业《数据结构本》提交实验报告参考248.docx

《国开作业《数据结构本》提交实验报告参考248.docx》由会员分享,可在线阅读,更多相关《国开作业《数据结构本》提交实验报告参考248.docx(8页珍藏版)》请在冰豆网上搜索。

国开作业《数据结构本》提交实验报告参考248.docx

国开作业《数据结构本》提交实验报告参考248

实验名称:

实验3栈、列队、递归程序设计

2.1栈和队列的基本操作

【问题描述】

编写一个算法,输出指定栈中的栈底元素,并使得原栈中的元素倒置。

【基本要求】

(1)正确理解栈的先进后出的操作特点,建立初始栈,通过相关操作显示栈底元素。

(2)程序中要体现出建栈过程和取出栈底元素后恢复栈的入栈过程,按堆栈的操作规则打印结果栈中的元素。

【实验步骤;】

(1)运行PC中的MicrosoftVisualC++6.0程序,

(2)点击“文件”→“新建”→对话窗口中“文件”→“c++SourceFile”→在“文件名”中输入“X1.cpp”→在“位置”中选择储存路径为“桌面”→“确定”,

(3)输入程序代码,

程序代码如下:

#include

#include

#defineMaxSize100

typedefcharElemType;

typedefstruct

{

ElemTypedata[MaxSize];

inttop;//栈顶指针

}SeqStack;//定义栈

typedefstruct

{

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;

s->top++;

s->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)

{

printf("%c",s->data[0]);//先进后出,栈底元素为第一个元素,即data[0]

printf("\n");

}

//---判空栈函数

intStackEmpty(SeqStack*s)

{

return(s->top==-1);

}

//---出栈函数

intPop(SeqStack*&s,ElemType&e)

{

if(s->top==-1)

return0;

e=s->data[s->top];

s->top--;

return1;

}

//---初始队列函数

voidInitQueue(SqQueue*&q)

{

q=(SqQueue*)malloc(sizeof(SqQueue));

q->front=q->rear=0;

}

//---入队列函数

intInQueue(SqQueue*&q,ElemTypee)

{

if((q->rear+1)%MaxSize==q->front)//队满

return0;

q->rear=(q->rear+1)%MaxSize;

q->elem[q->rear]=e;

return1;

}

//---出队列函数

intOutQueue(SqQueue*&q,ElemType&e)

{

if(q->front==q->rear)//队空

return0;

q->front=(q->front+1)%MaxSize;

e=q->elem[q->front];

return1;

}

//---判空队列函数

intQueueEmpty(SqQueue*q)

{

return(q->front==q->rear);

}

//-----主程序

voidmain()

{

ElemTypee;

SeqStack*s;

printf("

(1)初始化栈s\n");

InitStack(s);

printf("

(2)栈为%s\n",(StackEmpty(s)?

"空":

"非空"));

printf("(3)依次进栈元素a,b,c,d,e\n");

Push(s,'a');//入栈元素1

Push(s,'b');//入栈元素2

Push(s,'c');//入栈元素3

Push(s,'d');//入栈元素4

Push(s,'e');//入栈元素5

printf("(4)栈为%s\n",(StackEmpty(s)?

"空":

"非空"));

printf("(5)从栈顶到栈底元素:

");DispStack(s);

printf("(6)栈底元素为:

");DispBottomStack(s);

printf("(7)出栈/入队列序列:

");

SqQueue*q;

InitQueue(q);

while(!

StackEmpty(s))

{

Pop(s,e);//出栈

printf("%c",e);

InQueue(q,e);//入队

}

printf("\n");

printf("(8)栈为%s,",(StackEmpty(s)?

"空":

"非空"));

printf("队列为%s\n",(QueueEmpty(q)?

"空":

"非空"));

printf("(9)出队列/入栈序列:

");

while(!

QueueEmpty(q))

{OutQueue(q,e);//出队

Push(s,e);//入栈

printf("%c",e);

}

printf("\n");

printf("(10)栈为%s,",(StackEmpty(s)?

"空":

"非空"));

printf("队列为%s\n",(QueueEmpty(q)?

"空":

"非空"));

free(q);//释放队列

printf("(11)从栈顶到栈底元素:

");DispStack(s);

free(s);//释放栈

}

程序运行结果如下:

2.2递归程序设计

【问题描述】

给定一个5位的十进制正整数,用递归法分别编制程序:

(1)要求从低位到高位逐次输出各位数字。

(2)要求从高位到低位逐次输出各位数字。

【基本要求】

(1)比较题中两种不同要求的递归程序设计和执行过程差别。

(2)正确理解递归程序的执行过程。

(3)显示计算结果。

【实验步骤】

(1)运行PC中的MicrosoftVisualC++6.0程序,

点击“文件”→“新建”→对话窗口中“文件”→“c++SourceFile”→在“文件名”中

(2)输入“X1.cpp”→在“位置”中选择储存路径为“桌面”→“确定”,

(3)输入程序代码

程序代码如下:

#include

#include

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!

=0)

{

x=int(m/10);

z=m-x*10;

m=x;

printf("%d",z);

}

elseprintf("0");

j--;

if(j>=0)out1(m,j);

}

voidmain()

{

intm,n,o,x,i,j;

printf("输入需要排列的数字:

\n");

scanf("%d",&o);

m=n=o;

x=n;

i=-1;

while(x!

=0)

{

x=x/10;

i++;

}//求出i为十进制正整数位数

j=i;

printf("\n");

printf("从高位到低位逐次输出各位数字:

");

out(n,i);

printf("\n");

printf("从低位到高位逐次输出各位数字:

");

out1(m,j);

printf("\n");

}

程序运行结果如下:

实验结论:

栈和队列是运算受限制的线性表

栈:

后进先出(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

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

当前位置:首页 > 工程科技 > 材料科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1