数据结构C语言实现之数制转换

数据结构C语言实现之数制转换
数据结构C语言实现之数制转换

数据结构C语言实现之数制转换

一、需求分析

1、程序所实现的功能;

程序通过对栈的应用,实现了将一个十进制整数向R进制数的转换。

2、程序的输入,包含输入的数据格式和说明;

程序运行时,输入任意十进制整数。对于转换进制R的值则应为:10、

2、8、16。

3、程序的输出,程序输出的形式;

输出为转换成的R进制整数。

二、设计容

1、说明本程序中所有用到的数据及其数据结构的定义及其基本操作的定义;

1)定义栈的顺序存储结构

typedef struct

{

int *base;

int *top;

int stacksize;

}SqStack;//栈的顺序存储表示

2)栈的初始化int InitStack(SqStack &S)

3)判断一个栈是否为空int StackEmpty(SqStack &S)

4)入栈操作int Push(SqStack &S,int e)

5)出栈操作int Pop(SqStack &S,int &e)

6)数制转换函数void conversion(SqStack &S,int R,int N,int &e)

7)判断是否输入正确int Ninputlegality() int Rinputlegality()

8)主函数void main()

2、给出注释详细的源程序,及其设计思想的描述;

#include

#include

#include

#define STACK_INIT_SIZE 1000

#define STACKINCREMENT 10

#define TRUE 1

#define FALSE 0

#define OK 1

#define ERROR 0

#define OVERFLOW 0

typedef struct

{

int *base;

int *top;

int stacksize;

}SqStack;//栈的顺序存储表示

int N;//定义全局变量N,表示将要转换为R进制的十进制数

int R;//定义全局变量R,表示进制数R

int InitStack(SqStack &S)

{

S.base=(int*)malloc(STACK_INIT_SIZE * sizeof(int));

if(!S.base)exit(0);

S.top=S.base;

S.stacksize=STACK_INIT_SIZE;

return OK;

}//栈的初始化

int StackEmpty(SqStack &S)

{

if(S.top==S.base) return TRUE;

else return FALSE;

}//判断栈是否为空

int Push(SqStack &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(OVERFLOW);

S.top=S.base+S.stacksize;

S.stacksize+=STACKINCREMENT;

}

*S.top++=e;

return OK;

}//进栈操作

int Pop(SqStack &S,int &e)

{

if(S.top==S.base)return ERROR;

e=*--S.top ;

return OK;

}//出栈操作

void conversion(SqStack &S,int R,int N,int &e)

{

while(N)

{

Push(S,N%R);

N=N/R;

}

while(!StackEmpty(S))

{

Pop(S,e);

if(e<10)

{

printf("%d",e);

}

else

{ e=e+55;

printf("%c\n",e);

}

}

printf("\n");

}//数制转换函数

int Ninputlegality()

{

char str1[100];//数组str存放输入的字符,以便判断输入是否有误int i;

gets(str1);

for(i=0;str1[i]!='\0';i++)

{

if((str1[i]>57)||(str1[i]<48))

{

return(0);

break;

}

else

{

N=atoi(str1);//输入无误时,字符数组转换为十进制数N

return(1);

}

}

}//判断十进制数N输入是否合法

int Rinputlegality()

{

char str2[100];

int i;

gets(str2);

for(i=0;str2[i]!='\0';i++)

{

if((str2[i]>57)||(str2[i]<48))

{

return(0);

break;

}

else

{

R=atoi(str2);//输入无误时,字符数组转换为进制数R

return(1);

}

}

}//判断进制数r输入是否合法

void main()

{

int e,p,q;

SqStack S;

InitStack(S);

m: printf("请输入十进制整数N:");

p=Ninputlegality();

if(p==0)

{

printf("输入有误\n");

goto m;

}//保证输入数据合法

n:printf("请输入将要转换为的进制数R:");

q=Rinputlegality();

if(q==0)

{

printf("输入有误\n");

goto n;

}//保证输入数据合法

printf("%d由十进制转换为%d进制数为:",N,R);

conversion(S,R,N,e);

}//主函数

3、画出函数之间的调用关系图;

push() pop() stackempty()

3、测试结果

列出你的测试结果,包括输入和输出。注意测试数据应该完整和严格,至少给出2组测试结果(含合法数据与非法数据)。

第一组:合法输入,输入十进制45,将45转换为16进制数

错误,比如输入十进制数N时,误输入fh89ts,程序提示重新输入;N输入正确后,下一步输入R时若再输入错误,程序仍提示重新输入,直至输入完全正确。

四、附录

列出源程序的文件名清单。并将带注释的源程序及可执行文件,形成压缩文件。

数据结构C语言版期末考试试题(有答案)

“数据结构”期末考试试题 一、单选题(每小题2分,共12分) 1.在一个单链表HL中,若要向表头插入一个由指针p指向的结点,则执行( )。 A. HL=ps p一>next=HL B. p一>next=HL;HL=p3 C. p一>next=Hl;p=HL; D. p一>next=HL一>next;HL一>next=p; 2.n个顶点的强连通图中至少含有( )。 A.n—l条有向边 B.n条有向边 C.n(n—1)/2条有向边 D.n(n一1)条有向边 3.从一棵二叉搜索树中查找一个元素时,其时间复杂度大致为( )。 A.O(1) B.O(n) C.O(1Ogzn) D.O(n2) 4.由权值分别为3,8,6,2,5的叶子结点生成一棵哈夫曼树,它的带权路径长度为( )。 A.24 B.48 C. 72 D. 53 5.当一个作为实际传递的对象占用的存储空间较大并可能需要修改时,应最好把它说明为( )参数,以节省参数值的传输时间和存储参数的空间。 A.整形 B.引用型 C.指针型 D.常值引用型· 6.向一个长度为n的顺序表中插人一个新元素的平均时间复杂度为( )。 A.O(n) B.O(1) C.O(n2) D.O(10g2n) 二、填空题(每空1分,共28分) 1.数据的存储结构被分为——、——、——和——四种。 2.在广义表的存储结构中,单元素结点与表元素结点有一个域对应不同,各自分别为——域和——域。 3.——中缀表达式 3十x*(2.4/5—6)所对应的后缀表达式为————。 4.在一棵高度为h的3叉树中,最多含有——结点。 5.假定一棵二叉树的结点数为18,则它的最小深度为——,最大深度为——· 6.在一棵二叉搜索树中,每个分支结点的左子树上所有结点的值一定——该结点的值,右子树上所有结点的值一定——该结点的值。 7.当向一个小根堆插入一个具有最小值的元素时,该元素需要逐层——调整,直到被调整到——位置为止。 8.表示图的三种存储结构为——、——和———。 9.对用邻接矩阵表示的具有n个顶点和e条边的图进行任一种遍历时,其时间复杂度为——,对用邻接表表示的图进行任一种遍历时,其时间复杂度为——。 10.从有序表(12,18,30,43,56,78,82,95)中依次二分查找43和56元素时,其查找长度分别为——和——· 11.假定对长度n=144的线性表进行索引顺序查找,并假定每个子表的长度均

三种不同方法解决数制转换问题

/////////////////方法一 #include #define S 10 void zh(int N,int r) { int L[S],top; int x; top=-1; while(N) { L[++top]=N%r; N=N/r; while(top!=-1) { x=L[top--]; printf("%d",x); } } printf("\n"); } main() { int w,z; scanf("%d%d",&w,&z); zh(w,z); } ///////////////////////////方法二 #include #include #define maxsize 50 void conversion(int n,int r) { int ss[maxsize]={0}; int i=0; int j; while(n) { ss[i]=(n%r); i++; n=n/r; } for(j=0;j

}//数制转换 void main() { int n=37; int r=4; printf("十进制数%2d转换为%d进制数。\n",n,r); conversion(n,r); } /////////////////方法三 #include #include #define maxsize 5 typedef struct { int data[maxsize]; int top; }seqstack; void init_seqstack(seqstack *s) { s->top=-1; }//栈的初始化 int empty_seqstack(seqstack *s) { if(s->top==-1) return 1; else return 0; }//空栈的判断 int push_seqstack(seqstack *s,int x) { if(s->top==maxsize-1) return 0; else { (s)->data[++(s)->top]=x; return (1); } }//进栈 int pop_seqstack(seqstack *s,int *x)

数据结构(c语言版)期末考试复习试题

《数据结构与算法》(c语言版)期末考复习题 一、选择题。 1.在数据结构中,从逻辑上可以把数据结构分为 C 。 A.动态结构和静态结构B.紧凑结构和非紧凑结构 C.线性结构和非线性结构D.内部结构和外部结构 2.数据结构在计算机内存中的表示是指 A 。 A.数据的存储结构B.数据结构C.数据的逻辑结构D.数据元素之间的关系 3.在数据结构中,与所使用的计算机无关的是数据的 A 结构。 A.逻辑B.存储C.逻辑和存储D.物理 4.在存储数据时,通常不仅要存储各数据元素的值,而且还要存储 C 。A.数据的处理方法B.数据元素的类型 C.数据元素之间的关系D.数据的存储方法 5.在决定选取何种存储结构时,一般不考虑 A 。 A.各结点的值如何B.结点个数的多少 C.对数据有哪些运算D.所用的编程语言实现这种结构是否方便。 6.以下说法正确的是 D 。 A.数据项是数据的基本单位

B.数据元素是数据的最小单位 C.数据结构是带结构的数据项的集合 D.一些表面上很不相同的数据可以有相同的逻辑结构 7.算法分析的目的是 C ,算法分析的两个主要方面是 A 。(1)A.找出数据结构的合理性B.研究算法中的输入和输出的关系C.分析算法的效率以求改进C.分析算法的易读性和文档性(2)A.空间复杂度和时间复杂度B.正确性和简明性 C.可读性和文档性D.数据复杂性和程序复杂性 8.下面程序段的时间复杂度是O(n2) 。 s =0; for( I =0; i

数据结构课程设计数制转换

目录 1前言 (1) 1.1设计背景和意义 (1) 1.1.1数据结构简介 (2) 1.1.2选择算法的原因 (2) 1.2设计的原理和内容 (2) 2正文 (2) 2.1 设计的目的和意义 (2) 2.2 目标和总体方案 (2) 2.3 设计方法和内容 (3) 2.3.1模块划分 (3) 2.3.2主要程序模块 (3) 2.4 程序的设计思想和内容 (6) 2.4.1用数组实现该问题 (6) 2.4.2用栈实现该问题 (6) 2.5 设计创新和关键技术 (6) 2.6 程序调试 (6) 2.7程序流程图 (7) 2.8结论 (8) 参考文献 (9) 附录 (9)

1前言 1.1设计背景和意义 1.1.1数据结构简介 数据结构是计算机程序设计的重要理论设计基础,是一门综合性的专业基础科。数据结构是研究数据之间的相互关系,也即数据的组织形式的一门科学。它不仅是计算机学科的核心课程,数据结构是计算机存储、组织数据的方式。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率的算法。在计算机科学中,“数据结构”不仅是一般程序设计的基础,而且是设计和实现编译程序、操作系统、数据库系统及其他系统程序和大型应用程序的重要基础。 1.1.2选择算法的原因 在许多类型的程序的设计中,数据结构的选择是一个基本的设计考虑因素。许多大型系统的构造经验表明,系统实现的困难程度和系统构造的质量都严重的依赖于是否选择了最优的数据结构。许多时候,确定了数据结构后,算法就容易得到了。有些时候事情也会反过来,我们根据特定算法来选择数据结构与之适应。不论哪种情况,选择合适的数据结构都是非常重要的。 1.2设计的原理和内容 设计了一个10进制转换其它进制(36进制以内)及逆转换的软件,该软件具有简单的将10进制数转换成2、8、16进制数以及较复杂的高进制数的转换和逆转功能。本软件采用C 语言编写以VC++作为软件开发环境,采用顺序栈存储方式来存储运算中的数位,借助栈后进先出的特点,易于结果输出。操作简单,界面清晰,易于为用户所接受。 2正文 2.1 设计的目的和意义 我们是计算机科学与技术专业的本科生,《数据结构》是我们重要的必修课程。当代社会学要大学培养出理论扎实,动手实践能力强的大学生。所以,本次课程设计的目的就在于通过一次实践性的活动加深对这门课程的理解,使我们在感性的认识上进一步升华为理性的认识。为后继课程的学习打下坚实的基础。通过本次数据结构课程设计,我们基本上掌握了课程设计流程,还掌握了一些知识和技能,这对于我们以后对于数据结构的学习有了很大的帮助和提高,加深了我们对数据结构的理解,,为今后的学习打下了坚实的基础。同时也提高了我们对于编程这方面的能力。 2.2 目标和总体方案 本次设计的目标在于设计出一个能够实现数制转换的程序,于是特制订了一个总体的方案:

数据结构c语言版期末考试复习试题

《数据结构与算法》复习题 一、选择题。 1在数据结构中,从逻辑上可以把数据结构分为 C 。 A ?动态结构和静态结构B.紧凑结构和非紧凑结构 C.线性结构和非线性结构 D.内部结构和外部结构 2?数据结构在计算机内存中的表示是指_A_。 A .数据的存储结构B.数据结构 C .数据的逻辑结构 D .数据元素之间的关系 3.在数据结构中,与所使用的计算机无关的是数据的A结构。 A .逻辑 B .存储C.逻辑和存储 D .物理 4.在存储数据时,通常不仅要存储各数据元素的值,而且还要存储_C A .数据的处理方法 B .数据元素的类型 C.数据元素之间的关系 D .数据的存储方法 5.在决定选取何种存储结构时,一般不考虑A A .各结点的值如何C.对数据有哪些运算 B .结点个数的多少 D .所用的编程语言实现这种结构是否方 6.以下说法正确的是D A .数据项是数据的基本单位 B .数据元素是数据的最小单位 C.数据结构是带结构的数据项的集合 D .一些表面上很不相同的数据可以有相同的逻辑结构 7.算法分析的目的是 C ,算法分析的两个主要方面是 A 。 (1) A .找出数据结构的合理性B.研究算法中的输入和输出的关系 C .分析算法的效率以求改进C.分析算法的易读性和文档性 (2) A .空间复杂度和时间复杂度B.正确性和简明性 &下面程序段的时间复杂度是0( n2) s =0; for( I =0; i

数制转换数据结构课程设计报告

《数据结构》 课程设计报告书 题目:数制转换 系别:计算机科学与应用系学号: 学生姓名: 指导教师: 完成日期:2013—6—1

数制转换 1.需求分析 任意给定一个M进制的数x ,实现如下要求 1)求出此数x的10进制值(用MD表示) 2)实现对x向任意的一个非M进制的数的转换。 3)至少用两种或两种以上的方法实现上述要求(用栈解决,用数组解决,其它方法解决)。 2.概要设计 程序流程可以用以下流程图来刻画: A用数组实现 B用栈实现 3.详细设计 A.用数组实现该问题 D2M()函数和M2D()函数是实现该问题的主要函数。D2M()函数是实现十进制转换为其他进制的函数,它是将输入的十进制数x首先对需要转换的进制M取余,然后在对其取整,接着通过递归调用D2M()函数一次将得到的整数部分一次先取余后取整,并将所得的余数依次存入下一数组,然后逆向去除数组中的元素,即得到转换后的结果。而M2D()函数是实现其他进制M转换为十进制,并将其转换为非M进制。M进制转十进制则是从该M 进制数的

最后一位开始运算,依次列为第0、1、2、……..N位并分别乘以M的0、1、2、…..N次方,将得到的次方相加便得到对应的十进制数,再调用D2M()函数将其转换为非M进制的数。 B.用栈实现 栈具有后进先出的性质,具体实现方法和数组的方法有很大联系,不再过多解释。 4.调试分析 (1)构造栈的方法通过查阅书籍知道了。 (2)数组的递归调用查阅相关书籍了解了。 (3)为了让界面表达更清晰,多次调试完善了界面。 5.测试结果 下面是我的测试函数及运行结果: A.数组测试结果

数据结构+数制转换实验报告

数据结构实验报告题目:数制转换 班级:*** 姓名:*** 学号:200707041 指导教师:** 完成日期:2009 年 4 月18 日

一、需求分析 1、程序所实现的功能; 程序通过对栈的应用,实现了将一个十进制整数向R进制数的转换。 2、程序的输入,包含输入的数据格式和说明; 程序运行时,输入任意十进制整数。对于转换进制R的值则应为:10、2、 8、16。 3、程序的输出,程序输出的形式; 输出为转换成的R进制整数。 二、设计内容 1、说明本程序中所有用到的数据及其数据结构的定义及其基本操作的定义; 1)定义栈的顺序存储结构 typedef struct { int *base; int *top; int stacksize; }SqStack;//栈的顺序存储表示 2)栈的初始化int InitStack(SqStack &S) 3)判断一个栈是否为空int StackEmpty(SqStack &S)

4)入栈操作int Push(SqStack &S,int e) 5)出栈操作int Pop(SqStack &S,int &e) 6)数制转换函数void conversion(SqStack &S,int R,int N,int &e) 7)判断是否输入正确int Ninputlegality() int Rinputlegality() 8)主函数void main() 2、给出注释详细的源程序,及其设计思想的描述; #include #include #include #define STACK_INIT_SIZE 1000 #define STACKINCREMENT 10 #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define OVERFLOW 0 typedef struct { int *base;

ArcGis数据结构转换

ArcGis数据结构转换 地理信息系统的空间数据结构主要有栅格结构和矢量结构,它们是表示地理信息的两种不同方式。栅格结构是最简单最直观的空间数据结构,又称为网格结构(raster或grid cell)或象元结构(pixel),是指将地球表面划分为大小均匀紧密相邻的网格阵列,每个网格作为一个象元或象素,由行、列号定义,并包含一个代码,表示该象素的属性类型或量值,或仅仅包含指向其属性记录的指针。因此,栅格结构是以规则的阵列来表示空间地物或现象分布的数据组织,组织中的每个数据表示地物或现象的非几何属性特征。矢量结构是通过记录坐标的方式尽可能精确地表示点、线、多边形等地理实体。在地理信息系统中栅格数据与矢量数据各具特点与适用性,为了在一个系统中可以兼容这两种数据,以便有利于进一步的分析处理,常常需要实现两种结构的转换。 1.栅格数据向矢量数据的转换 栅格向矢量转换处理的目的,是为了将栅格数据分析的结果,通过矢量绘图装置输出,或者为了数据压缩的需要,将大量的面状栅格数据转换为由少量数据表示的多边形边界,但是主要目的是为了能将自动扫描仪获取的栅格数据加入矢量形式的数据库。 由栅格数据可以转换为3种不同的矢量数据,分为点状、线状和面状的矢量数据。下面以栅格数据转换为面状矢量数据为例进行说明,其他两种转换操作大同小异,这里不再具体说明。 (1)展开Conversion Tools工具箱,打开From Raster 工具集,双击Raster to Polygon,打开Raster to Polygon对话框(图1)。 图1 Raster to Polygon对话框 (2)在Input raster文本框中选择输入需要转换的栅格数据。 (3)在Output Polygon Features文本框键入输出的面状矢量数据的路径与名称。 (4)选择Simplify Polygons按钮(默认状态是选择),可以简化面状矢量数据的边界形状。(5)单击OK按钮,执行转换操作。

数制及数制转换案例分析

数制及数制转换案例分析 1.几种常用的计数体制 日常生活中最常使用的是十进制数(如563),但在数字系统中特别是计算机中,多采用二进制、十六进制,有时也采用八进制的计数方式。无论何种记数体制任何一个数都是由整数和小数两部分组成的。 1) 十进制数(Decimal) (1) 当所表示的数据是十进制时,可以无须加标注意,即十进制数576可以表示为: (576)10=576 (2) 特点如下。 ①由10个不同的数码0、1、2、…、9和一个小数点组成。 ②采用“逢十进一”的运算规则。 例如(213.71)10=2×102+1×101+3×100+7×10-1+1×10-2 102、101、100、10-1、10-2 称为权或位权,10为其计数基数。 在实际的数字电路中采用十进制十分不便,因为十进制有十个数码,要想严格的区分开必须有十个不同的电路状态与之相对应,这在技术上实现起来比较困难。因此在实际的数字电路中一般是不直接采用十进制的。 2) 二进制数(Binary) (1) 表示:(101.01)2 (2) 特点如下。 ①由两个不同的数码0、1 和一个小数点组成。 ②采用“逢二进一、借一当二”的运算规则。 3) 八进制(Octal) (1) 表示:(106.4)8 (2) 特点如下。 ①由8 个不同的数码0、1、2、3、4、5、6、7和一个小数点组成。 ②采用“逢八进一、借一当八”的运算规则。 4) 十六进制(Hexadecimal) (1) 表示:(2A5)6 (2) 特点如下。 ①由16 个不同的数码0、1、2、…、9、A、B、C、D、E、F 和一个小数点组成,其中A~F 分别代表十进制数10~15。 ②采用“逢十六进一、借一当十六”的运算规则。 2.数制转换 十进制数符合人们的计数习惯且表示数字的位数也较少;二进制适合计算机和数字系统

数据结构(C语言版)期末复习

数据结构(C语言版)期末复习汇总 第一章绪论 数据结构:是一门研究非数值计算程序设计中的操作对象,以及这些对象之间的关系和操作的学科。 数据结构分为:逻辑结构、物理结构、操作三部分 逻辑结构:集合、线性结构、树形结构、图(网)状结构 物理结构(存储结构):顺序存储结构、链式存储结构 算法:是为了解决某类问题而规定的一个有限长的操作序列。 算法五个特性:有穷性、确定性、可行性、输入、输出 评价算法优劣的基本标准(4个):正确性、可读性、健壮性、高效性及低存储量 语句频度的计算。 算法的时间复杂度: 常见有:O(1),O(n),O(n2),O(log2n),O(nlog2n),O(2n) 第二章线性表 线性表的定义和特点: 线性表:由n(n≥0)个数据特性相同的元素构成的有限序列。线性表中元素个数n(n≥0)定义为线性表的长度,n=0时称为空表。 非空线性表或线性结构,其特点: (1)存在唯一的一个被称作“第一个”的数据元素; (2)存在唯一的一个被称作“最有一个”的数据元素; (3)除第一个之外,结构中的每个数据元素均只有一个前驱; (4)除最后一个之外,结构中的每个数据元素均只有一个后继。 顺序表的插入:共计n个元素,在第i位插入,应移动(n-i+1)位元素。 顺序表的删除:共计n个元素,删除第i位,应移动(n-i)位元素。 线性表的两种存储方式:顺序存储、链式存储。 顺序存储 概念:以一组连续的存储空间存放线性表; 优点:逻辑相邻,物理相邻;可随机存取任一元素;存储空间使用紧凑; 缺点:插入、删除操作需要移动大量的元素;预先分配空间需按最大空间分配,利用不充分;表容量难以扩充; 操作:查找、插入、删除等 查找: ListSearch(SqlList L,ElemType x,int n) { int i; for (i=0;i

数据结构课程设计 数制转换 数组和栈

中北大学 数据结构与算法课程设计 说明书 学院、系:软件学院 专业:软件工程 学生姓名:xxx 学号:xxxx 设计题目:数制转换问题 起迄日期: 2013年12月9日- 2013年12月20日指导教师:xxx 2013 年12月 20 日

1、需求分析 任意给定一个M进制的数x ,请实现如下要求 1) 求出此数x的10进制值(用MD表示) 2) 实现对x向任意的一个非M进制的数的转换。 3) 用两种方法实现上述要求(用栈解决和用数组解决)。 2、概要设计 流程图 数组的流程图:

栈的流程图:

算法思想 1、用数组实现该问题: DtoM()函数和MtoD()函数是实现该问题的主要函数。DtoM()函数是实现十进制转换为其它进制的函数,它是将输入的十进制数x取首先对需要转换的进制M取余,然后再对其取整,接着通过递归调用DtoM()函数依次将得到的整数部分依次先取余后取整,并将所得的余数依次存入一个数组中,然后逆向取出数组中的元素,即得到转换后的结果。而MtoD()函数则是实现其他进制M转换为十进制,并将其转换为非M进制的数。M进制转十进制则是从该M进制数的最后一位开始算,依次列为第0、1、2…n位并分别乘以M的0、1、2…n次方,将得到的次方相加便得到对应的十进制数,再调用DtoM()函数将其转换为非M进制的数。 2、用栈实现该问题: 同样是利用DtoM()和MtoD()两个函数实现。两个函数的思想同利用数组实现时相同。只是栈具有后进先出的性质,故其用Pop()取数较数组的逆向取数方便些。 模块划分 1、用数组实现该问题: ⑴i,j,y,n,s,m,r,reminder,x是定义的全局变量,初始值都为0; ⑵DtoM(int g,int h)是实现十进制数转换为M进制数的函数; ⑶MtoD()是实现M(仅指二进制数和八进制数)进制数转换为十进制数的函数,并 在其中调用D2M(int g,int h)实现向非M进制数的转换; ⑷HtoD(int f)是实现十六进制数转换为十进制数的函数,并在其中调用D2M(int g,int h)实现向非十六进制数的转换; ⑸void main()是主函数,功能是给出测试的数据,并在特定条件下调用D2M()

数制转换问题(完整)

数据结构课程设计 题目名称:数制转换问题 课程名称:数据结构 学生姓名: 学号: 学院名称: 指导教师:

目录 一.需求分析………………………………………………………二.概要设计………………………………………………………三.详细设计………………………………………………………四.调试测试………………………………………………………五.总结……………………………………………………………

一.需求分析 应用环境设定:生活中我们需要将M进制的数转换为我们所需要 的进制,从键盘任意输入一个M进制的数,对其 进行转换成其他三种进制的数,然后再从电脑中 显示出来,最终得到我们的结果。 用户界面:命令行界面,根据自己的要求,对界面的提示进行操作,正确输入我们需要的数据。 输入方式:首先输入将转换的进制数,回车确认;然后输入确定的数据,回车确认;接着选择要转换为的进制数,回车确 认。 输出方式:界面直接输出,启动程序后,按照界面提示,输入数据,直接回车确认,显示屏即输出我们的数据结果。 数据储存方式:全部在内存存放,不使用硬盘上的文件或其他数据 源,程序执行过程中和结束后不保存数据。 程序功能:1.根据界面提示输入M进制数据。 2.对任意M进制数据实行非M进制的转换。 二.概要设计 在此说明数据结构设计和关键的算法设计思想 1.用数组实现该问题 D2M()函数和M2D()函数是实现该问题的主要函数。D2M()函数是实现十进制转换为其它进制的函数,它是将输入的十进制数x取首先对需要转换的进制M取余,然后再对其取整,接着通过递归调用D2M()函数依次将得到的整数部分依次先取余后取整,并将所得的余

任意进制转换(数据结构c语言版)

以下是在vc++6.0下运行的结果,我列举了输入345,进制分别为2,8,16的得出的结果,下面的不止只有这三个,输入任意进制的都可以 输入一个整数和进制数:345,2 转换成进制之后的数:101011001 Press any key to continue 输入一个整数和进制数:345,2 转换成进制之后的数:101011001 Press any key to continue 输入一个整数和进制数:345,16 转换成进制之后的数:159 Press any key to continue 程序如下: #include #include #define TRUE 1 #define FALSE 0 #define Stack_Size 100 typedef int StackElementType; typedef struct { StackElementType elem[Stack_Size]; int top; }SeqStack; void InitStack(SeqStack *S) { S->top=-1; }

int Push(SeqStack *S,StackElementType x) { if(S->top==Stack_Size-1) return(FALSE); S->top++; S->elem[S->top]=x; return(TRUE); } int Pop(SeqStack *S,StackElementType *x) { if(S->top==-1) return(FALSE); else { *x=S->elem[S->top]; S->top--; return(TRUE); } } int GetTop(SeqStack *S,StackElementType *x) { if(S->top==-1) return(FALSE); else { *x=S->elem[S->top]; return(TRUE); } } void main() { int m,n,x; char ch; SeqStack S; InitStack (&S);

空间数据结构

空间数据结构 摘要:空间数据模型和空间数据结构是地理信息系统(GIS)课题的中心内容。本文对空间数据结构的定义、分类进行了一定的研究性的归纳与总结。 关键词:空间数据结构,矢量数据,栅格数据 引言 GIS中空间数据结构和空间数据模型是紧密相关的。数据模型的建立必须通过一定的数据结构,但两者之间也有非常大的区别。数据模型是一个总得概念,是人为概念化的真实,是对现实世界的提取,对现实世界的认识和选择。而数据结构指数据元素之间的相互关系,它是软件常规内涵,根据空间数据结构和数据模型的特点及其关系,可以建立空间数据库系统。 空间数据结构定义 空间数据结构是带有空间数据单元的集合。这些数据单元是数据的基本单 位,一个数据单元可以有几个数据项组成,数据单元之间存在某种联系叫做结构。 所以,研究空间数据结构,是指空间目标间的相互关系,包括几何和非几何的关 系,数据结构是数据模型的表述,数据结构往往通过一系列的图表和矩阵,以及 计算机码的数据记录来说明。 空间数据结构的分类 矢量数据结构 定义 矢量数据结构是基于矢量模型,利用欧几里得(EUCLID)几何学中的点、线、 面及其组合体来表示地理实体的空间分布,是通过记录坐标的方式,尽可能精确 地表示点线多边形等地理实体,自然地理实体的位置是用其在坐标参考系中的空 间位置来定义的,坐标空间设为连续,允许任意位置长度和面积的精确定义,其 特点是定位明显,属性隐含。 GIS采用的矢量数据结构模型,是将空间地质实体抽象成点、线、面三种几 何要素,矢量数据结构通过优化拓扑结构表达空间实体的相关关系,为空间数据 库建立基本框架。 矢量数据结构的特点 优点:数据按照点、线或多边形为单元进行组织,结构简单、直观、易实现 以实体为单位的运算和显示。 缺点:

《数制转换》教案

《数制转换及计算机中数的表示》教案 教学目标: 【知识目标】 1、理解进制的含义。 2、掌握二进制、十进制、八进制、十六进制数的表示方法。 3、掌握二进制、八进制、十六进制数转换为十进制的方法。 4、掌握十进制整数、小数转换为二进制数的方法。 5、掌握计算机中数的表示 【技能目标】 1、培养学生逻辑运算能力。 2、培养学生分析问题、解决问题的能力。 3、培养学生独立思考问题的能力。 4、培养学生自主使用网络软件的能力。 【情感目标】 通过练习数制转换,让学生体验成功,提高学生自信心。 教学重点: 1、各进制数的表示方法。 2、各进制数间相互转换的方法。 3、计算机中数的表示 教学难点: 十进制整数、小数转换为二进制数的方法;计算机中数的表示。 学法指导: 教师讲授、学生练习、教师总结、教师评价。 教学基础: 学生基础: 学生只学习了“计算机基础”一章的“计算机产生和发展”一节。 设备基础: 硬件:多媒体网络机房;教师机一台;学生机每人一台;大屏幕投影;教师机与学生机之间互相联网。 教学过程: 一、新课导入 我们日常生活中使用的数是十进制、十进制不是唯一的数的表示方法,表示数的数制还有哪些呢?这些数制与十进制间有什么关系呢?这节课我们就来学习数制。 二、新课讲解

第一部分数制及其转换 1、数制 数制的表示方法:为了区别不同进制数,一般把具体数用括号括起来,在括号的右下角标上相应表示数制的数字。 举例:(101) 2与(101) 10 基数:所使用的不同基本符号的个数。 权:是其基数的位序次幂。 ①十进制、二进制、十六进制、八进制的概念 (1)十进制(D):由0~9组成;权:10i;计数时按逢十进一的规则进行;用(345.59)10 或345.59D表示。 (2)二进制(B):由0、1组成;权:2i;计数时按逢二进一的规则进行;用(101.11)2 或101.11B表示。 (3)十六进制(H):由0~9、A~F组成;权:16i;计数时按逢十六进一的规 则进行;用(IA.C) 16 或IA.CH表示。 (4)八进制(Q):由0~7组成;权:8i;计数时按逢八进一的规则进行;用(34.6)8 或34.6Q表示。 总结:不同数制的表示方法有两种,一种是加括号及数字下标,另一种是数字后加相应的大写字母D、B、H、Q。 ②按权展开基本公式: 设一个基数为R的数值N,N=(d n-1d n-2 …d 1 d d -1 …d -m ),则N的展开为:N=d n-1 ×R n-1 +d n-2×R n-2+…+d 1 ×R1+d ×R0+d -1 ×R-1+…+d -m ×R-m。 说明:(d n-1 d n-2 …d 1 d d -1 …d -m )表示各位上的数字,R i为权。 例如:十进制数2345.67展开式为:2345.67=2×103+3×102+4×101+5×100+6 ×10-1+7×10-2 2、n进制转换为十进制的方法 n进制转换为十进制的方法:按权展开法(将n进制数按权展开相加即可得到相应的十进制数)。以二进制为例: 例如,将二进制数(1011.011) 2 转换成十进制数的方法为: (1011.011) 2=1×23+0×22+1×21+1×20+0×2-1+1×2-2+1×2-3=(11.375) 10

常用数制及其相互转换

一、常用数制及其相互转换 在我们的日常生活中计数采用了多种记数制,比如:十进制,六十进制(六十秒为一分,六十分为一小时,即基数为60,运算规则是逢六十进一),……。在计算机中常用到十进制数、二进制数、八进制数、十六进制数等,下面就这几种在计算机中常用的数制来介绍一下。1.十进制数 我们平时数数采用的是十进制数,这种数据是由十个不同的数字0、1、2、3、4、5、6、7、8、9任意组合构成,其特点是逢十进一。 任何一个十进制数均可拆分成由各位数字与其对应的权的乘积的总和。例如: ? ? ? 这里的10为基数,各位数对应的权是以10为基数的整数次幂。为了和其它的数制区别开来,我们在十进制数的外面加括号,且在其右下方加注10。 2.二进制数 在计算机中,由于其物理特性(只有两种状态:有电、无电)的原因,所以在计算机的物理设备中获取、存储、传递、加工信息时只能采用二进制数。二进制数是由两个数字0、1任意组合构成的,其特点是逢二进一。例如:1001,这里不读一千零一,而是读作:一零零一或幺零零幺。为了与其它的数制的数区别开来,我们在二进制数的外面加括号,且在其右下方加注2,或者在其后标B。 任何一个二进制数亦可拆分成由各位数字与其对应的权的乘积的总和。其整数部分的权由低向高依次是:1、2、4、8、16、32、64、128、……,其小数部分的权由高向低依次是:0.5、0.25、0.125、0.0625、……。 二进制数也有其运算规则: 加法:0+0=0????0+1=1???1+0=1????1+1=10 乘法:0×0=0????0×1=0????1×0=0????1×1=1 二进制数与十进制数如何转换: (1)二进制数—→十进制数 对于较小的二进制数: 对于较大的二进制数: 方法1:各位上的数乘权求和??例如: (101101)2=1×25+0×24+1×23+1×22+0×21+1×20=45 (1100.1101)2=1×23+1×22+0×21+0×20+1×2-1+1×2-2+0×2-3+1×2-4=12.8125 方法2:任何一个二进制数可转化成若干个100…0?的数相加的总和??例如: (101101)2=(100000)2+(1000)2+(100)2+(1)2 而这种100…00形式的二进制数与十进制数有如下关联:1后有n个0,则这个二进数所对应的十进制数为2n。 所以:(101101)2=(100000)2+(1000)2+(100)2+(1)2=25+23+22+20=45

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

数据结构试验报告栈的应用——进制转换程序

if(s->top - s->base >= STACK_INIT_SIZE) { s->base=(int *)realloc(s->base , (s->stacksize + STACKINCREMENT) * sizeof(int) ); if(!s->base) { exit(OVERFLOW); } s->top=s->base + STACKINCREMENT; } * s->top ++ = *e; return OK; } 3.出栈程序 int Pop(Stack *s , int *e) { if(s->top == s->base) { return ERROR; } *e = * -- s->top; return OK;

} 4.主函数与进制转化 void main() { int N; int a; int e; Stack s; InitStack(&s); Pop(&s , &e); Push(&s ,&e); InitStack(&s); printf("请输入十进制数:"); scanf("%d",&N); printf("要将N转化为几进制"); scanf("%d",&a); while(N) { e=N%a; Push( &s , &e ); N = N / a ; }

int *base; int *top; int stacksize; }Stack; int InitStack(Stack *s) { s->base=(int *)malloc(STACK_INIT_SIZE * sizeof(int)); if(!s->base) { exit(OVERFLOW); } s->top=s->base; s->stacksize=STACK_INIT_SIZE; return OK; } int Push(Stack *s , int *e) { if(s->top - s->base >= STACK_INIT_SIZE) { s->base=(int *)realloc(s->base , (s->stacksize + STACKINCREMENT) * sizeof(int) );

数制的概念及转换

数制的概念及转换 一、进位计数制 以十进制为例: [例1]8756.74=8×1000+7×100+5×10+6×1+7×0.1+4×0.01 =8×103+7×102+5×101+6×100+7×10-1+4×10-2 数码(10个):0、1、2、3、4、5、6、7、8、9 进位法则:逢十进一 基数:10(数码的个数) 权:10 n-1 十制数的表示方法:( ***** )10 或***** D 任何一个十进制数都可以写成以10为基数按权展开的多项式,即: S=A1*10 n-1 +A2*10 n-2 +…+A N-1*101 +A N*100 + A N+1*10-1 +… 说明:(A1,A2,……A N)表示各位上的数字 强调:第一个权的指数是多少?与位数的关系 二、二进制数 1、计算机中为何采用二进制数: 十进制的缺点:数码多,对计算机逻辑电路要求高 二进制的优点:使用电子器件表示两种物理状态容易实现,两种状态的系统稳定性高,二进制运算简单、硬件容易实现、存储和传送可靠等 (1)可行性 二进制数只有0、1两个数码,采用电子器件很容易实现,而其它进制则很难实现。 (2)可靠性 二进制的0、1两种状态,在传输和处理时不容易出错。 (3)简易性 二进制的运算法规简单,这样,使得计算机的运算器结构大大简化,控制简单。 (4)逻辑性 二进制的0、1两种状态,可以代表逻辑运算中的“假”和“真”两种值。 2、二进制: 数码(2个):0、1 进位法则:逢二进一(1+0=1 0+1=1 0+0=0 1+1=10) 基数:2 权:2 n-1 二进制数的表示方法:( ***** )2 或***** B [例2]二进制的运算: 1+1=10 10+1=11 11+1=100 100+1=101 101+1=110 3、二进制转换成十进制: [例3](1101) 2 =1×23+1×22+0×21+1×20 =8+4+0+1 =(13) 10 [例4](10110.101) 2 =1×24+0×23+1×22+1×21+0×20+1×2-1+0×2-2+1×2-3 =16+0+4+2+0+0.5+0+0.125 =(22.625) 10 结论:把二进制转换成十进制只要把二进制数写成基数2按权展开的多项式。 练习:二进制转换成十进制: (1110101) 2=(117) 10

《数据结构(C语言描述)》期末试卷要点

专业 《数据结构(C 语言描述)》期末试卷 ( — 学年 第 学期) 一、填空(10分) 1、一个m 阶B-树中,每个结点最少有( ceil(m/2) )个儿子结点,m 阶B+树中每个结点(除根外)最多有( m )个儿子结点. 2、n(n>0)个结点构成的二叉树,叶结点最多有( floor((n+1)/2) )个,最少有( 1 )个。若二叉树有m 个叶结点,则度为2的结点有( m-1 )个。 3、顺序查找方法适用于存储结构为( 顺序表和线性链表 )的线性表,使用折半查找方法的条件是(查找表为顺序存贮的有序表 ) 4、广义表A=(( ),(a ,(b ,c)),d)的表尾Gettail(A)为( ((a,(b,c)),d) ) 5、直接插入排序,起泡排序和快速排序三种方法中,( 快速排序 )所需的平均执行时间最小;( 快速排序 )所需附加空间最大。 二、选择(10分) 1、倒排文件的主要优点是:( C ) A 、便于进行插入和删除 B 、便于进行文件的合并 C 、能大大提高基于非主关键字数据项的查找速度 D 、易于针对主关键字的逆向检索 2 下面程序段的时间复杂性为( C ) y=0; while(n>=(y+1)*(y+1)) { y++; } A 、O(n) B 、O(n 2) C 、 O(sqrt(n)) D 、 O(1) 3、若从二叉树的任一结点出发到根的路径上所经过的结点序列按其关键字有序,则该二叉树是( C ) A 、二叉排序树 B 、哈夫曼树 C 、堆 D 、AVL 树 4、栈和队列都是( B ) A 、顺序存储的线性结构 B 、限制存取点的线性结构 C 、链式存储的线性结构 D 、限制存取点的非线性结构 5、用顺序查找方法查找长度为n 的线性表时,在等概率情况下的平均查找长度为( D ) A 、n B 、n/2 C 、(n-1)/2 D 、(n+1)/2 三、简答(30分) 1、已知一棵二叉树的前序扫描序列和中序扫描序列分别为ABCDEFGHIJ 和BCDAFEHJIG ,试给出该二叉树的后序序列并绘出该二叉树对应的森林。 院(系) 班级 姓名 学号 ……………………………………………装…………………………订………………………线……………………………………………

数据结构课程设计报告-进制转换

课程设计报告 设计题目:进制转换问题 学生姓名: 专业:信息安全 班级:信息安全10-02 学号: 指导教师: 完成日期:2011年12月 课程设计报告的内容及要求 一、问题描述: 任意给定一个M进制的数x ,请实现如下要求: 1、求出此数x的10进制值(用MD表示) 2、实现对x向任意的一个非M进制的数的转换 3、至少用两种或两种以上的方法实现上述要求(用栈解决,用数组解决,其它方法解决)软件环境:Vc6.0编程软件 二、实验环境 运行平台:Win32 硬件:普通个人pc机 软件环境:VC++6.0编程软件 三、解决办法: 1、用数组实现该问题: ten_else()函数是实现十进制转换为其它进制的函数,先设置一个while循环,当十进制数g等于零时停止,再将输入的十进制数x取首先对需要转换的进制M取余,然后再对其取整,并将所得的余数依次存入一个数组中,然后逆向取出数组中的元素,即得到转换后的结果。将其他进制M转换为十进制,并将其转换为非M进制数是在主函数中实现的。M进制转十进制则是从该M进制数的最后一位开始算,依次列为第0、1、2…n位并分别乘以M 的0、1、2…n次方,将得到的次方相加便得到对应的十进制数,再调用ten_else()函数将其转换为非M进制的数。实际上十进制起到了一个桥梁作用。 2、用栈实现该问题: 与数组方法核心思想相同,stack定义栈,初始化一个空栈,然后判断是否为空,接着是去栈顶元素(用z表示栈顶元素),数据入栈,出栈的操作。栈具有后进先出的性质,故其用s.pop()取数较数组的逆向取数较为方便,体现了栈的优越性。

四、设计和编码的回顾讨论和分析 (1)函数ten_else()的作用体现在将任意10进制数转换为非10进制数,程序能实现1~16进制的相互转换。在10进制以上的数需要用字母表示,由此设计了switch函数,当出现余数大与10的情况可以调用相应的字母。考虑到最终结果是所求余数的倒序,添加新的整型变量j,通过一个for循环实现倒序。 (2)编程初期设计了else_ten函数,后几经修改将其融入main函数中较为直观。 (3)当输入10进制以下的数向10进制转换时候较为简单,程序中设计char型数组s[maxnum]来统计所输入数据的位数,不需要用户输入。在求10进制的时候通过for循环求一个累和即可。 (4)当输入10进制以上的数设计字母较为复杂,通过对ASCⅡ表的理解设计程序。 (5)在用栈法实现非10进制向10进制转换的时候遇到了些麻烦,当输入8A的时候程序将8当成字符类型,将其编译为数字56,导致最终转换结果出现错误。于是通过查阅ASCⅡ表对程序做出了修正,设计了条件语句if(z<=57)z-=48;if(z>=65){z-=65;z+=10;} 五、程序框图 六、经验和体会 (1)我们在写程序的时候要多角度考虑问题,比如题目中要求栈法与数组方法同时去实现进制转换问题。在编译过程中我们可以将特殊的问题逐渐的化为一般问题,比如10进制转换到16进制是,我举的例子是200转换为C8。 (2)通过此次课程设计的考验,让我们回顾了算法与数据结构这门课的主要内容。掌握了如何分别用数组和栈来实现数据存储与转换,加深了对栈的掌握和操作,以及栈先进后出的特点。 (3)在程序的调试初期,我们遇到了许多问题,暴露了对编译软件不熟悉的弊端,如设置断

相关文档
最新文档