数据结构 实验二

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

实验二 堆栈和队列基本操作的编程实现

【实验目的】
堆栈和队列基本操作的编程实现
要求:
堆栈和队列基本操作的编程实现(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]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呵呵up

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值