栈和队列及其应用实验报告
- 格式:doc
- 大小:84.50 KB
- 文档页数:5
数据结构实验报告
实验名称:栈和队列及其应用
班 级:12级电气本2
学 号:2012081227
姓 名:赵雪磊
指导教师:梁海丽
日 期:2013年9月23日
数学与信息技术学院
一、 实验目的
1. 掌握栈和队列的概念。
2.掌握栈和队列的基本操作(插入、删除、取栈顶元素、出队、入队等)。
3.理解栈和队列的顺序、链式存储。
二、 实验要求
利用顺序栈将任意一个给定的十进制数转换成二进制、八进制、十六进制数并输出。
三、 算法描述
#include "stdafx.h"
#include "iomanip.h"
void D10to2_8_16(int i,char radix)
{
char m;
if(i>=radix)
D10to2_8_16(i/radix,radix);
if((m=i%radix+'0')>0x39)
m+=7;
cout << m;
}
void main(void)
{
int nDec;
cout << "请输入一个十进制正整数...\n" << "nDec=";
cin >> nDec;
cout << "转换为二进制是:";
D10to2_8_16(nDec,2);
cout << endl;
cout << "转换为八进制是:0";
D10to2_8_16(nDec,8); cout << endl;
cout << "转换为十六进制是:0x";
D10to2_8_16(nDec,16);
cout << endl;
}
四、 程序清单
#include
#include
#define N 2 //可以控制进制转换
using namespace std;
typedef struct{
int *top;
int *base;
int stacksize;
}stack;
int initstack(stack &s)
{
s.base =(int *)malloc(100*sizeof(int));
s.top =s.base ;
s.stacksize =100;
return 1;
}
int push(stack &s,int e)
{
*s.top =e;
s.top ++;
return 1;
}
int pop(stack &s,int &e)
{
s.top --;
e=*s.top ;
return 1;
}
int getelem(stack s)
{
int e=0;
while(s.base !=s.top )
{
pop(s,e);
cout< } return 1; } int creatstack(stack &s) { float e=0,m=1; cout<<"输入0表示结束栈的初始化"< while(m!=0)//输入0表示结束栈的初始化 { cin>>e; if(e!=0) push(s,e); m=e; } return 1; } int convert() //利用栈转化进制函数 { int n,m=1,e=0; stack s; initstack(s); cout< while(m) { cin>>n; m=n; if(n!=0) { while(n) { push(s,n%N); n=n/N; } while(s.top !=s.base ) { pop(s,e); cout< } cout< } } return 1; } void main() { stack s; initstack(s); creatstack(s); getelem(s); convert(); } 五、 实验结果与分析 六、 实验心得 在调试程序的过程中,感触颇多。在我所编译的程序中,算得上是一个比较繁琐的程序。若想程序完善,好多方面都需要考虑到。但在每一段程序中,有一点疏忽就可能导致整个程序无法运行。