数制转换(栈应用)实验报告

合集下载

实验二+++栈的应用(数制转换)

实验二+++栈的应用(数制转换)

实验二栈的应用(数制转换)一、实验目的掌握栈的基本操作:初始化栈、判栈为空、出栈、入栈等运算。

二、实验要求1.认真阅读和掌握本实验的算法。

2.上机将本算法实现。

3.保存程序的运行结果,并结合程序进行分析。

三、实验内容利用栈的基本操作实现将任意一个十进制整数转化为R进制整数算法为:1、定义栈的顺序存取结构2、分别定义栈的基本操作(初始化栈、判栈为空、出栈、入栈等)3、定义一个函数用来实现上面问题:(1)十进制整数X和R作为形参(2)初始化栈(3)只要X不为0重复做下列动作将X % R入栈, X=X/R(4)只要栈不为空重复做下列动作栈顶出栈 , 输出栈顶元素四、实验报告要求:1、十进制整数转化为R进制整数算法的代码;2、程序运行结果及分析;3、实验总结。

1.实验源码:#include"stdio.h"#include"stdlib.h"#include"malloc.h"#define maxsize 100typedef struct{int data[maxsize];int top;}seqstack,*pseqstack;pseqstack setstack(){pseqstack s;s=(pseqstack)malloc(sizeof(seqstack));if(s)s->top=-1;return s;}int empty(pseqstack s){if(s->top==-1)return 1;elsereturn 0;}pseqstack pushin(pseqstack s,int m,int r) {if(s->top==maxsize-1)printf("此栈已满,无法入栈!\n");else{while(m!=0){s->top++;s->data[s->top]=m%r;m=(m-(m%r))/r;}}return s;}int popout(pseqstack s){if(empty(s))return 0;else{printf("转化后的数是:");while(s->top!=-1){printf("%d",s->data[s->top]);s->top--;}putchar('\n');return 1;}}void main(){int m,r;pseqstack p;p=(pseqstack)malloc(sizeof(seqstack));printf("请输入一个十进制的正整数:");scanf("%d",&m);printf("请输入你想转化的进制位:");scanf("%d",&r);p=setstack();p=pushin(p,m,r);popout(p);}2.程序截图:3.实验总结:友情提示:本资料代表个人观点,如有帮助请下载,谢谢您的浏览!。

《C数据结构》数制转换实验报告

《C数据结构》数制转换实验报告

数制转换实验目的:使用堆栈的存储结构实现数制转换,如10进制->2进制等实验思路:1、写出堆栈的相关操作函数,如:创建【int InitStack( SqStack *S )】、压入【int Push(SqStack *S,int e)】、弹出【int Pop(SqStack *S,int *e)】、销毁【void DestroyStack(SqStack *S)】、判断是否为空【int StackEmpty(SqStack *S)】等。

2、堆栈的各操作函数完成后编写功能函数——数制转换【voidchangeNumber(int *num,int to)】。

3、数制转换函数之后编写主函数,使用上述函数实现数制转换的功能核心代码:1、数制转换函数:void changeNumber(int *num,int to){int result[100],yu,e,m,i=0,j=0; //result[]是转换后的结果,yu是取余的结果SqStack S;for(m=0;m<100;m++){result[m]='#';}InitStack(&S);while(*num!=0){yu=*num%to;Push(&S,yu);*num=*num/to;}while(!StackEmpty(&S)){Pop(&S,&e);result[i]=e;i++;}while(1){printf("%d",result[j]);j++;if(result[j]=='#'){printf("\n");break;}}DestroyStack(&S);}2、主函数:int main(){int *p,num,to;int ok;while(1){printf("您想转换的数字是:");scanf("%d",&num);printf("转换成多少进制:");scanf("%d",&to);p=&num;changeNumber(p,to);while(1){printf("继续请按1,退出请按0...");scanf("%d",&ok);if(ok!=0 && ok!=1){printf("抱歉,您的输入有误,");}else if(ok==0 || ok==1){break;}}if(ok==0){break;}}system("pause");return 1;}功能演示:1、运行执行文件,进入dos窗口后可见提示:“您想转换的数字是:”2、输入:“1000”,回车后可见提示:“转换成多少进制:”3、输入:“6”,回车,得到结果:“4344”,又见提示:“继续请按1,退出请按0...”4、输入0退出。

数据结构实验报告 栈进制转换

数据结构实验报告 栈进制转换

数据结构实验报告栈进制转换数据结构实验报告栈进制转换一、实验目的栈是一种常见的数据结构,本实验的目的在于通过实现栈的基本操作,设计并实现一个进制转换的程序,并通过实验验证程序的正确性和效率。

二、实验原理1.栈的定义和基本操作栈是一种后进先出(Last In First Out,简称LIFO)的数据结构。

它可以通过一个指针来标识当前栈顶元素,栈顶指针top的起始值为-1,空栈时top=-1.2.栈的进制转换将一个十进制数转换为其他进制(如二进制、八进制、十六进制)的过程中,可以通过栈来实现。

具体步骤如下:- 初始化一个空栈;- 将十进制数依次除以目标进制的基数,将余数依次入栈,直到商为0;- 依次出栈,将出栈的余数组合起来,得到转换后的目标进制数。

三、实验内容1.实现栈的基本操作(1)定义栈结构,包括元素数组和栈顶指针;(2)实现入栈操作push(),将元素插入到栈顶;(3)实现出栈操作pop(),从栈顶删除一个元素并返回其值;(4)实现获取栈顶元素的操作getTop(),返回栈顶元素的值;(5)实现判断栈是否为空的操作isEmpty(),返回布尔值;(6)实现判断栈是否已满的操作isFull(),返回布尔值。

2.设计并实现进制转换的程序(1)初始化一个空栈用于存放转换后的数字;(2)输入十进制数num和目标进制target;(3)通过栈的操作将num转换为target进制数;(4)输出转换后的结果。

四、实验步骤1.实现栈的基本操作(1)定义栈的结构和相关操作;(2)编写相应的测试代码,验证栈的基本操作是否正确。

2.设计并实现进制转换的程序(1)根据原理部分的步骤,设计转换程序的具体逻辑;(2)编写相应的测试代码,验证转换程序的正确性和效率。

五、实验结果与分析1.给定一个十进制数num=12345,目标进制为二进制(target=2),经过进制转换后得到的结果为.111.2.给定一个十进制数num=456,目标进制为八进制(target=8),经过进制转换后得到的结果为.710.本实验的结果表明,转换程序能够正确地将十进制数转换为目标进制数,并且具有较高的效率。

实习03_栈的应用(回文判断及数制转换)

实习03_栈的应用(回文判断及数制转换)

实验三栈的应用(2学时)
1.实验目的:掌握栈与队列的基本操作,并对其进行简单应用。

2.实验内容:
(1)利用栈的基本操作对给定的字符串判断其是否是回文,若是则输出“Right”,否则输出“Wrong”。

(2)编写程序,把十进制正整数转换为n(n可以为2、8、16等等)进制数输出。

注意:转换必须用书上P48页算法3.1实现,其他方法不给分;基本操作的算法部分见书上P46-P47页。

3.实验准备:熟悉栈和队列的特点及基本操作。

预习要求:
事先预习书上P46—P47页有关栈的操作,包括:
1、如何定义栈结构;
2、如何初始化一个空栈;
3、如何获取栈顶元素;
4、如何让栈顶元素出栈;
5、如何将数据元素压入栈(进栈)
4.实验步骤:(1)审清题意,分析并理出解决问题的基本思路。

(2)根据基本思路,设计好程序的算法。

(3)根据算法编写源程序。

(4)在计算机上编译程
序,检验程序的可运行性
5. 实验报告:
(1)实验目的;
(2)实验内容;
(3)实验步骤:画图(如书上图3.2,仿照此图,画出实验内容2的操作),并程序调试过程和结果;
(4)总结。

栈及其应用实验报告

栈及其应用实验报告

一、实验目的1. 理解栈的定义、特点、逻辑结构及其在计算机科学中的应用。

2. 掌握顺序栈和链栈的存储结构及基本操作实现。

3. 通过具体应用实例,加深对栈的理解,提高问题分析和解决的能力。

二、实验内容1. 实现顺序栈和链栈的基本操作。

2. 编写一个算法,判断给定的字符序列是否为回文。

3. 编写一个算法,利用栈的基本运算将指定栈中的内容进行逆转。

4. 给定一个整数序列,实现一个求解其中最大值的递归算法。

三、实验步骤1. 实现顺序栈和链栈的基本操作(1)顺序栈的存储结构及操作实现顺序栈使用数组来实现,其基本操作包括:- 初始化栈:使用数组创建一个空栈,并设置栈的最大容量。

- 入栈:将元素插入栈顶,如果栈满,则返回错误。

- 出栈:从栈顶删除元素,如果栈空,则返回错误。

- 获取栈顶元素:返回栈顶元素,但不删除。

- 判断栈空:判断栈是否为空。

(2)链栈的存储结构及操作实现链栈使用链表来实现,其基本操作包括:- 初始化栈:创建一个空链表,作为栈的存储结构。

- 入栈:在链表头部插入元素,如果链表为空,则创建第一个节点。

- 出栈:删除链表头部节点,如果链表为空,则返回错误。

- 获取栈顶元素:返回链表头部节点的数据。

- 判断栈空:判断链表是否为空。

2. 判断字符序列是否为回文编写一个算法,判断给定的字符序列是否为回文。

算法步骤如下:(1)使用顺序栈或链栈存储字符序列。

(2)从字符序列的头部开始,依次将字符入栈。

(3)从字符序列的尾部开始,依次将字符出栈,并与栈顶元素比较。

(4)如果所有字符均与栈顶元素相等,则字符序列为回文。

3. 利用栈的基本运算将指定栈中的内容进行逆转编写一个算法,利用栈的基本运算将指定栈中的内容进行逆转。

算法步骤如下:(1)创建一个空栈,用于存储逆转后的栈内容。

(2)从原栈中依次将元素出栈,并依次入新栈。

(3)将新栈的内容赋值回原栈,实现栈内容的逆转。

4. 求解整数序列中的最大值给定一个整数序列,实现一个求解其中最大值的递归算法。

栈的应用实验报告

栈的应用实验报告
}
S->elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof (ElemType));
if (S->elem==NULL)
{
exit(OVERFLOW);
}
S->top = -1;
S->currentsize = LIST_INIT_SIZE;
return S;
}
/*释放栈分配的空间*/
void DestroyStack(SeqStack *S)
{
if(S!=NULL)
{
if (S->elem!=NULL)
{
free(S->elem);
}
S->elem=NULL;
}
}
/*判空*/
int IsEmpty(SeqStack *S)
{
return S->top==-1;
char data1[50]={0};
char data2[50]={0};
char ch;
cout<<"华锐学院C++作业"<<endl<<"请输入一个二进制整数:";
cin>>data1;
cout<<"您的输入是:"<<data1<<endl;
int num1=Chg2To10(data1);
cout<<"该数十进制为:"<<num1<<endl<<endl;
cout<<"请输入一个二进制整数:";

栈的应用实验报告心得

栈的应用实验报告心得

栈的应用实验报告心得栈是计算机科学中一个重要的数据结构,它是一种线性数据结构,具有后进先出(Last in First Out,LIFO)的特点。

在计算机科学中,栈有着广泛的应用,例如括号匹配、算术表达式的计算、函数调用和逆波兰表达式等。

本次实验是对栈的应用进行实验研究,主要掌握栈的数据结构原理和算法实现,并通过实验现实栈的应用。

一、实验目的1.学习栈的数据结构原理2.理解栈的应用场景及算法实现原理3.了解和掌握栈的应用方式,比如中缀表达式转换为后缀表达式等。

4.实践栈的应用,更好地对其数据结构和算法进行理解与掌握。

二、实验内容本次实验的内容包括以下三部分:1.栈的定义与实现:实验中需要了解栈的定义和实现方式,包括栈的基本概念和属性、如何创建一个栈、如何执行栈的push、pop等操作等。

2.中缀表达式转换为后缀表达式:中缀表达式的转换是栈的一个重要应用场景。

实验中需要了解中缀表达式的定义和特点,以及如何在栈的帮助下将中缀表达式转换为后缀表达式。

3.栈的应用:实验中需要了解栈在实际应用中的场景,比如搜索、排序、递归、括号匹配、编码解码等,掌握应用栈的具体实现方式和思路。

三、实验步骤1.栈的定义与实现定义一个数据结构表示栈,可以使用数组或链表来实现。

对于数组实现的栈,需要确定栈的大小,并实现push操作将数据插入到栈顶,实现pop操作从栈中取出数据等操作。

对于链表实现的栈,需要定义一个链表节点结构体表示一个栈元素,实现链表插入和删除操作等。

以数组实现栈为例,以下是一个简单的栈定义和实现:```#define MAXSIZE 100typedef struct {int data[MAXSIZE];int top;} stack;void initStack(stack *s) {s->top = -1;}int isEmpty(stack *s) {return s->top == -1;}int isFull(stack *s) {return s->top == MAXSIZE - 1; }void push(stack *s, int x) {if (isFull(s)) {printf("Stack overflow!\n"); exit(1);}s->data[++s->top] = x;}int pop(stack *s) {if (isEmpty(s)) {printf("Stack underflow!\n"); exit(1);}return s->data[s->top--];}```2.中缀表达式转换为后缀表达式中缀表达式是我们平常所用的表达式,其特点是操作符在操作数之间。

栈的应用的实验报告

栈的应用的实验报告

班级学号姓名实验组别试验日期室温报告日期成绩报告内容:(目的和要求、原理、步骤、数据、计算、小结等)实验名称:栈的实现与应用实验目的;1.掌握栈的定义。

2.掌握栈基本操作的实现,并能用于解决实际问题。

实验环境(硬/软件要求):Windows 2000, Visual C++ 6.0实验内容:1.实现栈的如下基本操作:push,pop,isempty,isfull,createstack.2.利用栈的基本操作实现conversion()函数,该函数能将任意输出的十进制整数转化为二进制形式表示。

实验要求:1.用顺序存储结构实现栈的基本操作:push,pop,isempty,isfull,createstack.2.利用栈的基本操作实现conversion()函数3.编写主函数完成实验内容2.【C语言源程序】#include<stdio.h>#include<stdlib.h>#define maxsize 1024 /*栈的最大容量为1024*/typedef int datatype;typedef struct{datatype elements[maxsize];int Top; /*栈指针*/}Stack;void setNull(Stack *S){S->Top=-1;}int isfull(Stack *S){if(S->Top>=maxsize-1)return (1);else return (0);}int isempty(Stack *S){if(S->Top>=0)return (0);else return (1);} /*isempty*/void push( Stack *S,datatype E){ if(S->Top>=maxsize-1){printf("Stack Overflow");} /*上溢现象*/ else{ S->Top++;S->elements[S->Top]=E;}}datatype *pop(Stack *S){datatype *temp;if(isempty(S)){printf("Stack underfiow");return (NULL);}else{S->Top--;temp=(datatype *)malloc(sizeof(datatype));*temp=S->elements[S->Top+1];return (temp);}}/*pop*/void conversion(int n){Stack S;setNull(&S);int r,m;r=n;while(r){m=r%2;if(isfull(&S))printf("Over flow\n");else push(&S,m);r=r/2;}printf("转化后的二进制数为\n");while(!isempty(&S))printf("%d",*(pop(&S)));printf("\n");}void main(){int num;printf("请输入要转换为二进的十进制数据\n");scanf("%d",&num);conversion(num); }。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验报告
1.实验题目
运用栈进行数制转换。

2.需求分析
用C编写完成:对于输入的任意一个非负十进制整数,输出与其等值的其他进制数。

3.概要设计
由于运行过程是从低位到高位顺序产生进制数的各个数位,而输出应从高位到底位进行,这和计算过程相反,恰好可以运用栈把进制数的各位顺序入栈,而按出栈序列输出,即为对应转换的进制数。

4.详细设计
1)先对栈定义:
Typedef struct{
SElemType *base;
SElemType *top;
int stacksize;
}Stack;
2)构造一个栈:
int InitStack(Stack &S)//初始化栈
{
S.base=(SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType));
if(!S.base) exit (ERROR); //存储分配失败
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return OK;
}
3)分别进行入栈和出栈操作,再进行进制转换。

5.调试分析
#include <stdio.h>
#include <stdlib.h>
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define OK 1
#define ERROR 0
//栈定义
typedef struct
{
int *base;
int *top;
int stacksize;
}Stack;
int InitStack(Stack &S)//初始化栈
{
S.base=(int *)malloc(STACK_INIT_SIZE * sizeof(int));
if(!S.base) exit (ERROR); //存储分配失败
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return OK;
}
int push(Stack &S,int e)//入栈
{
if(S.top-S.base>=S.stacksize) //栈满
{
S.base=(int *)realloc(S.base,(S.stacksize+STACKINCREMENT)* sizeof(int));
if(!S.base) exit (ERROR); //存储分配失败
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
return 1;
}
int pop(Stack &S,int &e)//出栈
{
if(S.top==S.base) return ERROR;//栈空
e=* --S.top;
return OK;
}
void conversion(int n,int m)//n为十进制数,m为要转换进制
{
Stack S;
InitStack(S);
while(n!=0)
{
push(S,n%m);
n=n/m;
}
while(S.top!=S.base)
{
int x;
pop(S,x);
printf("%x",x);
}
}
int main()
{
int n,m;
printf("请输入一个十进制正整数:");
scanf("%d",&n);
printf("\n输入要转换进制:");
scanf("%d",&m);
if(m<2)
{
printf("输入不合法!请输入大于1的进制!");
printf("\n");
return ERROR;
}
conversion(n,m);
printf("\n");
return OK;
}。

相关文档
最新文档