数据结构实验报告
实验名称:栈和队列及其应用
班级: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<iostream>
#include<malloc.h>
#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<<e<<" ";
}
return 1;
}
int creatstack(stack &s)
{
float e=0,m=1;
cout<<"输入0表示结束栈的初始化"<<endl; 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<<endl<<"输入你要转化的数,0表示结束"<<endl; 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<<e;
}
cout<<endl;
}
}
return 1;
}
void main()
{
stack s;
initstack(s);
creatstack(s);
getelem(s);
convert();
}
五、实验结果与分析
六、实验心得
在调试程序的过程中,感触颇多。
在我所编译的程序中,算得上是一个比较繁琐的程序。
若想程序完善,好多方面都需要考虑到。
但在每一段程序中,有一点疏忽就可能导致整个程序无法运行。