栈和队列及其应用实验报告

  • 格式: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();

}

五、 实验结果与分析

六、 实验心得

在调试程序的过程中,感触颇多。在我所编译的程序中,算得上是一个比较繁琐的程序。若想程序完善,好多方面都需要考虑到。但在每一段程序中,有一点疏忽就可能导致整个程序无法运行。