当前位置:
文档之家› 国家开放大学《数据结构》课程实验报告(实验3 ——栈、队列、递归设计)参考答案
国家开放大学《数据结构》课程实验报告(实验3 ——栈、队列、递归设计)参考答案
{
x=Pop(s); /*出栈*/
printf("%d ",x);
InQueue(sq,x); /*入队*/
}
printf("\n");
printf("(10)栈为%s,",(StackEmpty(s)?"空":"非空"));
printf("队列为%s\n",(QueueEmpty(sq)?"空":"非空"));
ElemType Pop(SeqStack *s); /*出栈*/
ElemType GetTop(SeqStack *s); /*取栈顶元素*/
void DispStack(SeqStack *s); /*依次输出从栈顶到栈底的元素*/
void DispBottom(SeqStack *s); /*输出栈底元素*/
} SeqQueue; /*定义顺序队列*/
void InitStack(SeqStack *s); /*初始化栈*/
int StackEmpty(SeqStack *s); /*判栈空*/
int StackFull(SeqStack *s); /*判栈满*/
void Push(SeqStack *s,ElemType x); /*进栈*/
sq=(SeqQueue *)malloc(sizeof(SeqQueue));
InitQueue(sq);
printf("(8)队列为%s\n",(QueueEmpty(sq)?"空":"非空"));
printf("(9)出栈/入队的元素依次为:");
/*依次出栈进入临时队列*/
while(!StackEmpty(s))
void InitQueue(SeqQueue *sq); /*初始化队列*/
int QueueEmpty(SeqQueue *sq); /*判队空*/
void InQueue(SeqQueue *sq,ElemType x); /*循环队列入队*/
ElemType OutQueue(SeqQueue *sq,ElemType x); /*循环队列出队*/
实验基本原理:
(1)采用顺序栈,即用数组存储栈元素。
(2)设定一个临时队列,用来存放从初始栈中出栈的元素。
(3)取出栈底元素后,将队列中的元素逐一出队并压入初始栈中。
实
验
内
容
程序代码:
/*实验2.1栈和队列的基本操作*/
#include <stdio.h>
#include <stdlib.h>
#define MaxSize 0
printf("队列为%s\n",(QueueEmpty(sq)?"空":"非空"));
printf("(13)从栈顶到栈底的元素依次为:"); DispStack(s);
printf("(14)栈底元素为:"); DispBottom(s);
free(s);
free(sq);
}
/*初始化栈*/
void InitStack(SeqStack *s)
{
s->top=-1;
}
/*判栈空*/
int StackEmpty(SeqStack *s)
{
if(s->top==-1)
return 1; /*栈空返回1 */
else
return 0; /*否则返回0 */
}
/*判栈满*/
int StackFull(SeqStack *s)
{
if(s->top==MaxSize-1)
ElemType GetQueue(SeqQueue *sq);/*取队头元素*/
void main()
{
SeqStack *s;
SeqQueue *sq;
ElemType x;
int n,i;
printf("(1)初始化栈s\n");
s=(SeqStack *)malloc(sizeof(SeqStack));
typedef int ElemType;
typedef struct
{
ElemType data[MaxSize];
int top; /*栈顶指针*/
} SeqStack; /*定义顺序栈*/
typedef struct
{
ElemType data[MaxSize];
int front,rear; /*队头和队尾指针*/
国家开放大学《数据结构》课程实验报告
(实验3栈、队列、递归设计)
学生姓名
学 号
班 级
指导老师
实验名称
实验成绩
实验报告
实
验
概
述
实验目的:
编写一个算法,输出指定栈中的栈底元素,并使得原栈中的元素倒置。
实验要求:
(1)正确理解栈的先进后出的操作特点,建立初始栈,通过相关操作显示栈底元素。
(2)程序中要体现出建栈过程和取出栈底元素后恢复栈的入栈过程,按堆栈的操作规则打印结果栈中的元素。
{
scanf("%d",&x);
Push(s,x);
}
printf("(4)栈为%s\n",(StackEmpty(s)?"空":"非空"));
printf("(5)从栈顶到栈底的元素依次为:"); DispStack(s);
printf("(6)栈底元素为:"); DispBottom(s);
printf("(7)初始化队列sq\n");
return 1; /*栈满返回1 */
else
return 0; /*否则返回0 */
}
/*进栈*/
void Push(SeqStack *s,ElemType x)
{
if (StackFull(s))
{
printf("栈满溢出错误!\n");
exit(1);
}
s->top++;
s->data[s->top]=x;
//依次出队进入原初始栈,实现栈的倒置
printf("(11)出队/进栈的元素依次为:");
while(!QueueEmpty(sq))
{
x=OutQueue(sq,x); /*出队*/
printf("%d ",x);
Push(s,x); /*进栈*/
}
printf("\n");
printf("(12)栈为%s,",(StackEmpty(s)?"空":"非空"));
InitStack(s);
printf("(2)栈为%s\n",(StackEmpty(s)?"空":"非空"));
printf("(3)输入要进栈的数据个数:");
scanf("%d",&n);
printf("依次输入进栈的%d个整数:",n);
/*数据依次进栈*/
for(i=0; i<n; i++)