软件工程/计算机科学专业课——数据结构实验报告(三): 栈与队列的应用【扩展实验:杨辉三角】

一、实验目的与要求:

  1. 掌握栈的基本操作:初始化栈、判栈为空、出栈、入栈等运算。
  2. 掌握队列的基本操作:初始化队列、判队列为空、出队列、入队列等运算。

要求:

1、利用栈特性对其进行基本操作:初始化栈,将栈置为空表,插入、删除栈。

2、利用队列特性对其进行基本操作:初始化队列、判队列为空、出队列、入队列。

二、实验内容提要:

【part one实验代码】

<1>这部分是头文件的包含,包括了标准输入输出库 <stdio.h>,定义了栈的最大大小为 100 的宏 MAXSIZE,以及标准库函数 <stdlib.h>。

<2>定义了一个名为 stack 的结构体,包含了一个整型数组 data 和一个整型变量 top,用来表示栈的数据和栈顶位置

 <3>定义了一个函数 init,用来初始化栈,将栈顶位置 top 设为 -1,表示栈为空

 <4>定义了一个函数 empty,用来判断栈是否为空,如果栈顶位置 top 等于 -1,则栈为空,返回 1,否则返回 0。

 <5>定义了一个函数 push,用来向栈中压入一个元素。首先判断栈是否已满,如果栈已满,则输出提示信息;否则,将栈顶位置 top 加一,并将元素 i 压入栈顶位置。

 <6>定义了一个函数 pop,用来从栈中弹出一个元素。首先判断栈是否为空,如果栈为空,则输出提示信息;否则,返回栈顶位置 top 处的元素,并将栈顶位置减一。

 <7>定义了一个函数 trans,用来将一个十进制整数转换为十六进制整数。首先创建了一个栈 s,并初始化为空栈。然后,利用栈的操作,将十进制数逐步除以 16,并将余数压入栈中。最后,从栈中依次弹出元素,并将其转换为十六进制输出。

 <8>主函数 main 中,首先清空屏幕并提示用户输入一个整数(负数结束),然后调用函数 trans 进行转换,最后循环读取用户输入的整数,并进行转换,直到用户输入 -1 为止

【part one实验结果】:

运行程序后,在命令行中首先输入了整数 100,程序将其转换为十六进制表示 64,并输出。接着再输入了整数 255,程序将其转换为十六进制表示 FF,并输出。最后,用户输入了 -1,程序结束

结论:

使用了栈的基本操作,包括初始化栈、压栈和弹栈。这些操作是栈的核心功能,能够有效地管理数据的存储和访问;实验中利用栈的特性,将十进制整数转换为十六进制整数。这涉及到了进制转换的原理,即利用不同进制的基数进行相除相余的操作,将一个数转换为另一个进制的表示;实验中的转换算法采用了从低位到高位的顺序,先将余数压入栈中,再依次弹出并输出,易于理解和实现。

【part two 杨辉三角代码】:

<1>定义了一个名为 SqQueue 的结构体,它包含一个整型数组 data 作为队列的数据存储空间,以及两个整型变量 front 和 rear 分别表示队列的队首和队尾。

 <2>这是一个初始化队列的函数,它动态分配了一个 SqQueue 结构体的内存空间,并将 front 和 rear 初始化为 0,表示队列为空。

 <3>int SqQueue_Full(SqQueue *Q) {...}:这个函数用于判断队列是否已满,如果 (Q->rear + 1) % MAXSIZE == Q->front 成立,则表示队列已满。

 <4>int Enter_SqQueue(SqQueue *Q,elemtype x) {...}:这是入队操作的函数,将元素 x 插入到队列的队尾,如果队列已满则返回 0。

 <5>int Delete_SqQueue(SqQueue *Q,elemtype *x) {...}:这是出队操作的函数,将队列的队首元素出队,并将其保存到 x 中,如果队列为空则返回 0。

 <6>int GetFront_SqQueue(SqQueue * Q,elemtype *x) {...}:这个函数用于获取队列的队首元素,但不出队,如果队列为空则返回 0。

 <7>void YHTriangle(int n) {...}:这是一个打印杨辉三角的函数,它接受一个整数参数 n,表示打印多少行的杨辉三角。在函数内部,使用循环队列来生成并打印杨辉三角的每一行。

 <8>main() 函数:在 main() 函数中调用 YHTriangle(7) 来打印 7 行的杨辉三角。

【part two 实验结果】

 

  • 61
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值