一、实验目的与要求:
- 掌握栈的基本操作:初始化栈、判栈为空、出栈、入栈等运算。
- 掌握队列的基本操作:初始化队列、判队列为空、出队列、入队列等运算。
要求:
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 实验结果】