实验二 堆栈和队列基本操作的编程实现
【实验目的】
堆栈和队列基本操作的编程实现
要求:
堆栈和队列基本操作的编程实现(2学时,验证型),掌握堆栈和队列的建立、进栈、出栈、进队、出队等基本操作的编程实现,存储结构可以在顺序结构或链接结构中任选,也可以全部实现。也鼓励学生利用基本操作进行一些应用的程序设计。
【实验性质】
验证性实验(学时数:2H)
【实验内容】
内容:
把堆栈和队列的顺序存储(环队)和链表存储的数据进队、出队等运算其中一部分进行程序实现。可以实验一的结果自己实现数据输入、数据显示的函数。
利用基本功能实现各类应用,如括号匹配、回文判断、事物排队模拟、数据逆序生成、多进制转换等。
【参考代码】(以下内容,学生任意选择一个完成即可)
(一)基础篇
利用顺序栈实现十进制整数转换转换成r进制
1、算法思想
将十进制数N转换为r进制的数,其转换方法利用辗转相除法,以N=3456,r=8为例转换方法如下:
N N / 8 (整除) N % 8(求余)
3456 432 0 低
432 54 0
54 6 6
6 0 6 高
所以:(3456)10 =(6600)8
我们看到所转换的8进制数按底位到高位的顺序产生的,而通常的输出是从高位到低位的,恰好与计算过程相反,因此转换过程中每得到一位8进制数则进栈保存,转换完毕后依次出栈则正好是转换结果。
算法思想如下:当N>0时重复1,2
①若 N≠0,则将N % r 压入栈s中 ,执行2;若N=0,将栈s的内容依次出栈,算法结束。
②用N / r 代替 N
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#define MAXSIZE 100 //根据需要自己定义MAXSIZE为顺序栈的最大存储容量
typedef struct stack
{
int data[MAXSIZE];
int top;
}SEQSTACK;
void initstack(SEQSTACK *s)//顺序栈初始化
{
s->top=-1;//将栈顶指针指向初始的位置
}
int empty(SEQSTACK *s) //判断栈空
{
if(s->top==-1)
return 1;
else
return 0;
}
void push(SEQSTACK *s,int x)//元素x进栈
{
if(s->top==MAXSIZE-1)
printf("存储空间已满,元素进栈失败!\n");
else
{
s->top++;//栈顶指针加1
s->data[s->top]=x;//将元素x送到栈顶位置
}
}
int pop(SEQSTACK *s)//元素出栈,出栈元素用e返回
{
int e;
if(empty(s)==-1)
{
printf("栈中元素已空,出栈元素失败!\n");
return -99;
}
else
{
e=s->data[s->top]

该实验主要目标是实现堆栈和队列的基本操作,包括建立、进栈、出栈、进队和出队。实验内容涵盖顺序存储和链表存储结构,同时也鼓励学生利用这些基本操作解决实际问题,如括号匹配、回文判断等。参考代码提供了使用顺序栈进行十进制到r进制转换的算法,以及链队列的基本操作示例。
最低0.47元/天 解锁文章
745

被折叠的 条评论
为什么被折叠?



