数据结构 栈十进制转八进制的算法详解(已测试过)

数据结构 栈十进制转八进制的算法详解(已测试过)
数据结构 栈十进制转八进制的算法详解(已测试过)

实验目的

建立栈实现十进制转八进制

实验内容

编程序并上机调试运行。

建立栈实现十进制转八进制

1.编写程序

//十进制转八进制

#include

#include

#include

#define STACK_INIT_SIZE 100

#define STACKINCREMENT 10

typedef struct {

int *base;

int *top;

int stacksize;

}sqstack;

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 0;

}//构造一个空栈s

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(1);

s->top=s->base+s->stacksize;

s->stacksize+=STACKINCREMENT;

}

*s->top++=e;

return 0;

}//插入新的元素e为新的栈顶元素

int stackempty (sqstack *s)

{if(s->top==s->base)

return 1;

else return 0;

}//若栈s为空栈,则返回1,否则返回0

int pop (sqstack *s,int *e)

{if(s->top==s->base)

return 1;

*e=*--s->top;

return 0;

}//若栈不为空,则删除s的栈顶元素,用e返回其值,返回OK,否则返回ERROR

void conversion (int n)

{ sqstack s;

int e;

initstack(&s);

printf("请输入一个十进制数:\n");

scanf("%d",&n);

while (n){

push(&s,n%8);

n=n/8;

}

printf("\n");

printf("该数的八进制数为:\n");

while(!stackempty(&s)){

pop(&s,&e);

printf("%d",e);

}

printf("\n");

}//对于输入的任意一个非负十进制整数,打印出与其等值的八进制数int main()

{

int n;

//sqstack *s;

// initstack(s);

conversion (n);

return 0;

}//主函数

运行程序:

程序解析:

1.首先是将程序的开头写好,要有#include,然后定义STACK_INIT_SIZE 为100 ,STACKINCREMENT为10。

定义栈顶和栈底都为int型,并且stacksize为int型。

2.构建一个空栈。

建立一个空栈,但建立不成功是就强制退出,建立成功时就使栈顶和栈顶指向同一个点,并且分配预定长度的节给stacksize。

3.插入新的元素e为新的栈顶元素

插入一个新的元素到栈里,如果长度超过栈的长度,则重新分配新的空间给sqstack。如果栈底部存在则发生错误,意外退出。然后让e插入成为新的栈顶元素。

4.判断栈是否为空栈。

该函数用stackempty表示,如果栈顶等于栈底,则栈为空栈,返回1,否则返回0.

5.取出栈顶元素

若栈为空,则返回1,若栈不为空,则让e指向s的栈顶元素,删除s的栈顶元素,用e返回其值。

6.建立conversion函数

定义一个空栈s,然后scanf输入一个数,当该数不为0时,就执行push函数和n=n/8,如果n=0则跳出循环。然后当栈不为空时,将栈顶一个一个取出,得到的为原十进制数的八进制数。

7.建立main函数。

这里的main函数只要三句话就够了。定义n,和调用conversion函数,return 0.

二进制十进制算法

在一种数制中,只能使用一组固定的数字符号来表示数目的大小,具体使用多少个数字符号来表示数目的大小,就称为该数制的基数。例如: 1.十进制(Decimal) 基数是10,它有10个数字符号,即0,l,2,3,4,5,6,7,8,9。其中最大数码是基数减1,即9,最小数码是0。 2.二进制(Binary) 基数是2,它只有两个数字符号,即0和1。这就是说,如果在给定的数中,除0和1外还有其它数,例如 1012,它就决不会是一个二进制数。 3.八进制(Octal) 基数是8,它有8个数字符号,即0,l,2,3,4,5,6,7。最大的也是基数减1,即7,最小的是0。 4.十六进制(Hexadecilnal) 基数是16,它有16个数字符号,除了十进制中的10个数可用外,还使用了6个英文字母。它的16个数字依次是0,l,2,3,4,5,6,7,8,9,A,B,C,D,E,F。其中A至F分别代表十进制数的10至15,最大的数字也是基数减1。 既然有不同的进制,那么在给出一个数时,需指明是什么数制里的数。例如: (1010) 2,(1010) 8 ,(1010) 10 ,(1010) 16 所代表的数值就不同。除了用下标表示外, 还可用后缀字母来表示数制。例如 ZA4EH,FEEDH,BADH(最后的字母 H表示是 十六进制数),与(ZA4E) 16,(FEED) 16 ,(BAD) 16 的意义相同。 进制和位权 在数制中,还有一个规则,这就是,N进制必须是逢N进一。 对于多位数,处在某一位上的“l”所表示的数值的大小,称为该位的位权。例如十进制第2位的位权为10,第3位的位权为100;而二进制第2位的位权为2,第3位的位权为4,对于 N进制数,整数部分第 i位的位权为Ni-1,而小数部分第j位的位权为N-j。 l.十进制数的特点是逢十进一。例如:

计算机考试中各种进制转换的计算方法

二进制数第0位的权值是2的0次方,第1位的权值是2的1次方…… 所以,设有一个二进制数:0110 0100,转换为10进制为: 下面是竖式: 0110 0100 换算成十进制 第0位 0 * 20 = 0 第1位 0 * 21 = 0 第2位 1 * 22 = 4 第3位 0 * 23 = 0 第4位 0 * 24 = 0 第5位 1 * 25 = 32 第6位 1 * 26 = 64 第7位 0 * 27 = 0 + --------------------------- 100 用横式计算为: 0 * 20 + 0 * 21 + 1 * 22 + 1 * 23 + 0 * 24 + 1 * 25 + 1 * 26 + 0 * 27 = 100 0乘以多少都是0,所以我们也可以直接跳过值为0的位: 1 * 2 2 + 1 * 2 3 + 1 * 25 + 1 * 26 = 100 2.2 八进制数转换为十进制数 八进制就是逢8进1。 八进制数采用 0~7这八数来表达一个数。

八进制数第0位的权值为8的0次方,第1位权值为8的1次方,第2位权值为8的2次方…… 所以,设有一个八进制数:1507,转换为十进制为: 用竖式表示: 1507换算成十进制。 第0位 7 * 80 = 7 第1位 0 * 81 = 0 第2位 5 * 82 = 320 第3位 1 * 83 = 512 + -------------------------- 839 同样,我们也可以用横式直接计算: 7 * 80 + 0 * 81 + 5 * 82 + 1 * 83 = 839 结果是,八进制数 1507 转换成十进制数为 839 2AF5换算成10进制: 第0位: 5 * 160 = 5 第1位: F * 161 = 240 第2位: A * 162 = 2560 第3位: 2 * 163 = 8192 +

数据结构与算法基础知识总结

数据结构与算法基础知识总结 1 算法 算法:是指解题方案的准确而完整的描述。 算法不等于程序,也不等计算机方法,程序的编制不可能优于算法的设计。 算法的基本特征:是一组严谨地定义运算顺序的规则,每一个规则都是有效的,是明确的,此顺序将在有限的次数下终止。特征包括: (1)可行性; (2)确定性,算法中每一步骤都必须有明确定义,不充许有模棱两可的解释,不允许有多义性; (3)有穷性,算法必须能在有限的时间内做完,即能在执行有限个步骤后终止,包括合理的执行时间的含义; (4)拥有足够的情报。 算法的基本要素:一是对数据对象的运算和操作;二是算法的控制结构。 指令系统:一个计算机系统能执行的所有指令的集合。 基本运算和操作包括:算术运算、逻辑运算、关系运算、数据传输。 算法的控制结构:顺序结构、选择结构、循环结构。 算法基本设计方法:列举法、归纳法、递推、递归、减斗递推技术、回溯法。 算法复杂度:算法时间复杂度和算法空间复杂度。 算法时间复杂度是指执行算法所需要的计算工作量。 算法空间复杂度是指执行这个算法所需要的内存空间。 2 数据结构的基本基本概念 数据结构研究的三个方面: (1)数据集合中各数据元素之间所固有的逻辑关系,即数据的逻辑结构; (2)在对数据进行处理时,各数据元素在计算机中的存储关系,即数据的存储结构;(3)对各种数据结构进行的运算。 数据结构是指相互有关联的数据元素的集合。 数据的逻辑结构包含: (1)表示数据元素的信息; (2)表示各数据元素之间的前后件关系。 数据的存储结构有顺序、链接、索引等。 线性结构条件:

(1)有且只有一个根结点; (2)每一个结点最多有一个前件,也最多有一个后件。 非线性结构:不满足线性结构条件的数据结构。 3 线性表及其顺序存储结构 线性表由一组数据元素构成,数据元素的位置只取决于自己的序号,元素之间的相对位置是线性的。 在复杂线性表中,由若干项数据元素组成的数据元素称为记录,而由多个记录构成的线性表又称为文件。 非空线性表的结构特征: (1)且只有一个根结点a1,它无前件; (2)有且只有一个终端结点an,它无后件; (3)除根结点与终端结点外,其他所有结点有且只有一个前件,也有且只有一个后件。结点个数n称为线性表的长度,当n=0时,称为空表。 线性表的顺序存储结构具有以下两个基本特点: (1)线性表中所有元素的所占的存储空间是连续的; (2)线性表中各数据元素在存储空间中是按逻辑顺序依次存放的。 ai的存储地址为:adr(ai)=adr(a1)+(i-1)k,,adr(a1)为第一个元素的地址,k代表每个元素占的字节数。 顺序表的运算:插入、删除。(详见14--16页) 4 栈和队列 栈是限定在一端进行插入与删除的线性表,允许插入与删除的一端称为栈顶,不允许插入与删除的另一端称为栈底。 栈按照“先进后出”(filo)或“后进先出”(lifo)组织数据,栈具有记忆作用。用top表示栈顶位置,用bottom表示栈底。 栈的基本运算:(1)插入元素称为入栈运算;(2)删除元素称为退栈运算;(3)读栈顶元素是将栈顶元素赋给一个指定的变量,此时指针无变化。 队列是指允许在一端(队尾)进入插入,而在另一端(队头)进行删除的线性表。rear指针指向队尾,front指针指向队头。 队列是“先进行出”(fifo)或“后进后出”(lilo)的线性表。 队列运算包括(1)入队运算:从队尾插入一个元素;(2)退队运算:从队头删除一个元素。循环队列:s=0表示队列空,s=1且front=rear表示队列满

二进制 各种转化

C语言中二进制十进制十六进制各是什么意思? 学按位要用到这些知识但又不懂! 匿名| 浏览1240 次问题未开放回答 推荐于2016-05-22 01:54:54 最佳答案 计算机中常用的数的进制主要有:二进制、八进制、十六进制,学习计算机要对其有所了解。2进制,用两个阿拉伯数字:0、1; 8进制,用八个阿拉伯数字:0、1、2、3、4、5、6、7; 10进制,用十个阿拉伯数字:0到9; 16进制就是逢16进1,但我们只有0~9这十个数字,所以我们用A,B,C,D,E,F这五个字母来分别表示10,11,12,13,14,15。字母不区分大小写。 以下简介各种进制之间的转换方法:

一、二进制转换十进制 例:二进制“1101100” 1101100 ←二进制数 6543210 ←排位方法 例如二进制换算十进制的算法: 1*26 + 1*25 + 0*24 + 1*23 + 1* 22 + 0*21 + 0*20 ↑↑ 说明:2代表进制,后面的数是次方(从右往左数,以0开始) =64+32+0+8+4+0+0 =108 二、二进制换算八进制 例:二进制的“10110111011” 换八进制时,从右到左,三位一组,不够补0,即成了: 010 110 111 011 然后每组中的3个数分别对应4、2、1的状态,然后将为状态为1的相加,如:010 = 2 110 = 4+2 = 6 111 = 4+2+1 = 7 011 = 2+1 = 3 结果为:2673

三、二进制转换十六进制 十六进制换二进制的方法也类似,只要每组4位,分别对应8、4、2、1就行了,如分解为:0101 1011 1011 运算为: 0101 = 4+1 = 5 1011 = 8+2+1 = 11(由于10为A,所以11即B) 1011 = 8+2+1 = 11(由于10为A,所以11即B) 结果为:5BB 四、二进制数转换为十进制数 二进制数第0位的权值是2的0次方,第1位的权值是2的1次方…… 所以,设有一个二进制数:0110 0100,转换为10进制为: 计算:0 * 20 + 0 * 21 + 1 * 22 + 0 * 23 + 0 * 24 + 1 * 25 + 1 * 26 + 0 * 27 = 100 五、八进制数转换为十进制数 八进制就是逢8进1。 八进制数采用0~7这八数来表达一个数。 八进制数第0位的权值为8的0次方,第1位权值为8的1次方,第2位权值为8的2次方…… 所以,设有一个八进制数:1507,转换为十进制为: 计算:7 * 80 + 0 * 81 + 5 * 82 + 1 * 83 = 839

java 十进制数转换为二进制,八进制,十六进制数的算法

java ê?????êy×a???a?t????,°?????,ê?áù????êyμ???·¨ using System; using System.Collections.Generic; using https://www.360docs.net/doc/37606532.html,ponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace ExDtoB { public partial class Form1 : Form { public Form1() { InitializeComponent(); } //ê?????×a?t?? public string DtoB(int d) { string b = ""; //?D????êyè?1?D?óú2£??ò?±?óê?3? if (d < 2) { b = d.ToString(); } else { int c; int s = 0; int n = d; while (n >= 2) { s++; n = n / 2; } int[] m = new int[s]; int i = 0; do

{ c = d / 2; m[i++] = d % 2; d = c; } while (c >= 2); b = d.ToString(); for (int j = m.Length - 1; j >=0; j--) { b += m[j].ToString (); } } return b; } //ê?????×a°????? public string DtoO(int d) { string o = ""; if (d < 8) { o = d.ToString(); } else { int c; int s=0; int n=d; int temp = d; while (n >= 8) { s++; n = n / 8; } int[] m = new int[s]; int i = 0; do { c = d / 8; m[i++] = d % 8; d = c; } while (c >= 8); o = d.ToString();

数据结构与算法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

二进制及其算法

所谓二进制,也就是计算机运算时用的一种算法。二进制只有一和零组成。 比方说吧,你上一年级时一定听说过“进位筒”&“数位筒”吧!十进制是个位 上满十根小棒就捆成一捆,放进十位筒,十位筒满十捆就捆成一大捆,放进百位筒……二进制也是一样的道理,个位筒上满2根就向十位进一,十位上满两根就 向百位进一,百位上满两根…… 二进制是世界上第一台计算机上用的算法,最古老的计算机里有一个个灯泡,当 运算的时候,比如要表达“一”,第一个灯泡会亮起来。要表达“二”,则第一 个灯泡熄灭,第二个灯泡就会亮起来。 随着科技的发展,二进制已经被“八进制”、“十六进制”取代了 一、二进制数转换成十进制数 由二进制数转换成十进制数的基本做法是,把二进制数首先写成加权系数展开式,然后按十进制加法规则求和。这种做法称为"按权相加"法。 二、十进制数转换为二进制数 十进制数转换为二进制数时,由于整数和小数的转换方法不同,所以先将十进制数的整数部分和小数部分分别转换后,再加以合并。 1. 十进制整数转换为二进制整数 十进制整数转换为二进制整数采用"除2取余,逆序排列"法。具体做法是:用2去除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为零时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。 2.十进制小数转换为二进制小数 十进制小数转换成二进制小数采用"乘2取整,顺序排列"法。具体做法是:用2乘十进制小数,可以得到积,将积的整数部分取出,再用2乘余下的小数部分,又得到一个积,再将积的整数部分取出,如此进行,直到积中的小数部分为零,或者达到所要求的精度为止。 然后把取出的整数部分按顺序排列起来,先取的整数作为二进制小数的高位有效位,后取的整数作为低位有效位。 1.二进制与十进制的转换 (1)二进制转十进制
方法:"按权展开求和" 例: (1011.01)2 =(1×23+0×22+1×21+1×20+0×2-1+1×2-2)10 =(8+0+2+1+0+0.25)10 =(11.25)10 (2)十进制转二进制 十进制整数转二进制数:"除以2取余,逆序输出" 例:(89)10=(1011001)2

十进制和二进制相互转化程序的设计书

十进制和二进制相互转化 程序设计书 需求分析 随着技术的不断提高,进制转换向着简单化,规模化发展,而对于只能识别二进制0和1码的计算机来说,如何翻译成人类可以认识和编译的语言,和安全加密等给信息管理有关的信息随之增加。在这种情况下单靠人工来处理这些信息不但显得大不从心,而且极容易出错。因此,需要开发二进制与十进制互换系统,该系统可以实现由计算机代替人工执行一系列复杂而繁琐的操作,使得办公人员可以轻松快捷的完成进制转换的任务。 总结系统需求分为大体分为5个模块: 首先第一个需要数据的信息输入,即输入数据的基本信息包括输入的进制选项,所输入的二进制位数,所输入的二进制数,所输入的十进制数和判断是否全1或全0五个模块。 第二个需求是判断数据进制选项信息,在信息和科技不断进步的今天,数据及时准确的更新成了任何一个系统的首要任务,本系统应时代所需设计了数制信息功能,包括对包括数据的进制,二进制数据的位数,十进制数据,进行进制转换计算。 第三个需求是所输入的二进制数据,数据的运行使用主要是解决向十进制转换 第四个需求是所输入的十进制数据,数据运行使用主要是解决向二进制转换。 第五个需求是打印退出,在对系统进行操作后,退出系统。

1.1 数据需求分析 本系统的主要数据进制转换的实现。转换包括:二进制数向十进制数转换,十进制数向二进制数转换,判断是否为全0或全1,是否继续执行等。 1.2功能需求分析 本程序功能为二进制和十进制的相互转换,二进制转十进制主要根据进制转换的根本方法,分别乘以2的次方得到十进制数;十进制转二进制主要根据“除2取余法”得到二进制数。另外,本程序简单易懂,操作简便,给出引导说明,以及还出错处理,只需按照提示输入即可用。 本系统主要实现对二进制与十进制之间互换,需要实现以下几个方面的功能: (1)二进制转十进制:选择二进制向十进制转换,选择二进制位数,输入二进制数,进行数制转换,输出结果,判断是否继续。 (2)十进制转二进制:选择十进制向二进制转换,输入十进制数,进行数制转换,输出结果,判断是否继续。 2系统总体设计 2.1系统模块划分 本系统主要是对二进制与十进制互换的管理,包括了二进制转十进制、十进

常用的大数据结构与算法

常用的大数据结构与算法 在学习了解这些数据结构和算法之前,引用一位前辈的话: “我们不需要你能不参考任何资料,实现红黑树;我们需要的是你能在实践当中,选择恰当的数据结构完成程序开发;在必要的时候,能在已有的数据结构基础上进行适当改进,满足工程需要。但要做到这一点,你需要掌握基础的算法和数据结构,你需要理解并应用一些高级数据结构和算法的思想。因此,在程序员这条道路上,你要想走得更远,你需要活用各种数据结构,你需要吸收知名算法的一些思想,而不是死记硬背算法本身。” 那么,工程实践当中,最常用的算法和数据结构有哪些? 以下是Google工程师Arjun Nayini在Quora给出的答案,得到了绝大多数人的赞同。 最常用的算法 1.图搜索算法(BFS,DFS) 2.排序算法 3.通用的动态规划算法 4.匹配算法和网络流算法 5.正则表达式和字符串匹配算法 最常用的数据结构 1.图,尤其是树结构特别重要 2.Maps结构 3.Heap结构 4.Stacks/Queues结构 5.Tries树 其他一些相对比较常用的数据算法还有:贪心算法、Prim’s / Kruskal’s算法、Dijkstra’s 最短路径算法等等。 怎么样才能活用各种数据结构? 你能很清楚的知道什么时候用hash表,什么时候用堆或者红黑色?在什么应用场景下,能用红黑色来代替hash表么?要做到这些,你需要理解红黑树、堆、hash表各有什么特性,彼此优缺点等,否则你不可能知道什么时候该用什么数据结构。 常言道: 程序=算法+数据结构 程序≈数据结构 小编希望这些算法的掌握能够帮助大家拓宽握数据结构和算法的视野,提高算法设计和动手编程的能力。

十进制转化二进制实验报告

实验报告 课程名称:算法与数据结构 题目:十进制转换为二进制 班级:电信1305 学号:1402130526 姓名:云昊 完成时间:2014年11月28日

1、实验目的和要求 本次课程设计的题目是数制转换程序,设计此题目主要目的在于加深对C 语言课程理论与数据结构课程理论实践方面的理解。通过编写一定规模和难度的程序,进行一次全面的C语言编程训练,掌握数据结构的思想,提高分析问题和解决问题的能力,并提高调试程序的能力,更深一步的掌握理论应用于实践。 本次课程设计的主要任务是完成对数制转换进行编程,要求用栈实现十进制到二进制的转换,了解十进制转换为二进制的原理,熟练对栈的基本操作,用栈的基本操作实现程序的效率化。 2、实验内容 本课程设计主要解决完成数制转化问题。完成功能如下: 1)任意给一个十进制的数; 2)完成十进制到二进制的数制转换; 3)本课程设计使用数组解决,用栈实现。 3、算法基本思想 数制转换的基本原理是:将一个十进制的数,转换为二进制的数,此过程可以采用求余法进行,用这个十进制数作为被除数,用指定的数基作除数,连续求余,得出的余数依由个位到十位等的顺序组成新数,即得指定数制的数。本次课程设计主要用了数组和栈两种的方法来实现的。堆栈的主要应用就是可以实现:后进先出(Last-In/First-Out)。转十进制的时候先得到是低位的数字,然后得到高位的数字,刚好使用堆栈可以把这个顺序颠倒过来,每得到一个数字就把它压栈,最后把所有的数字弹出,依次显示出来。 4、算法描述 用栈实现十进制到二进制的转换的程序为: #include #include #define maxsize 100 typedef struct

数据结构与算法

[试题分类]:数据结构与算法 1.数据结构可形式地定义为(D, S),其中S是D上( )的有限集。 A.操作 B.存储映像 C.关系 D.数据元素 答案:C 题型:单选题 知识点:1.2 基本概念和术语 难度:1 2.一般而言,最适合描述算法的语言是( )。 A.自然语言 B.计算机程序语言 C.介于自然语言和程序设计语言之间的伪语言 D.数学公式 答案:C 题型:单选题 知识点:1.4 算法和算法分析 难度:1 3.在下列序列中,不是线性表的是( )。 A. (‘a’,‘b’) B. (a, b) C. (‘AB’,‘CD’) D. (‘a’, b) 答案:D

题型:单选题 知识点:2.1 线性表的类型定义 难度:2 4.对于顺序表的优缺点,以下说法错误的是( )。 A.插入和删除操作较方便 B.可以方便地随机存取表中的任一结点 C.无需为表示结点间的逻辑关系而增加额外的存储空间 D.由于顺序表要求占用连续的空间,存储分配只能预先进行 题型:单选题 知识点:2.2线性表的顺序表示和实现 难度:2 5.在一个单链表中,已知q所指结点是p所指结点的前驱结点,若在q和p之间插入s结点,则执行( )。 A. s->next=p->next;p->next=s; B. p->next=s->next;s->next=p; C. q->next=s;s->next=p; D. p->next=s;s->next=q; 题型:单选题 知识点:2.3线性表的链式表示和实现 难度:2 6.若某链表中最常用的操作是在最后一个结点后插入一个结点和删除最后一个结点,则采用( )存储方式最节省时间。 A.单链表 B.带头结点的单链表 C.单循环链表

十进制转二进制手工方法

十进制转二进制 十进制到二进制的转换,通常要区分数的整数部分和小数部分,并分别按除2取余数部分和乘2取整数部分两种不同的方法来完成。 十进制数整数部分转换二进制数的方法与步骤 对整数部分,要用除2取余数办法完成十→二的进制转换,其规则是: 用2除十进制数的整数部分,取其余数为转换后的二进制数整数部分的低位数字; 再用2去除所得的商,取其余数为转换后的二进制数高一位的数字; 重复执行第二步的操作,直到商为0,结束转换过程。 例如, 将10进制的37转换成二进制整数的过程如下: 余数部分,即转换后的结果,为(100101) 2。 十进制小数部分转换二进制数方法与步骤 对小数部分,要用乘2取整数办法完成十→二的进制转换,其规则是: 用2乘十进制数的小数部分,取乘积的整数为转换后的二进制数的最高位数字; 再用2乘上一步乘积的小数部分,取新乘积的整数为转换后二进制小数低一位数字; 重复第二步操作,直至乘积部分为0,或已得到的小数位数满足要求,结束转换过程。 例如,将十进制的0.43,转换成二进制小数的过程如下(假设要求小数点后取5位): 整数部分,即转换后的二进制小数为(0.01101)2。 对小数进行转换的过程中,转换后的二进制已达到要求位数,而最后一次的乘积的小数部分不为0,会使转换结果存在误差,其误差值小于求得的最低一位的位权。 既有整数又有小数的十进制转二进制方法 对既有整数部分又有小数部分的十进制数, 可以先转换其整数部分为二进制数的整数部分,再转换其小数部分为二进制的小数部分,通过把得到的两部分结果合并起来得到转换后

的最终结果。例如,(37.43)10 = (100101.01101)2。 十进制转二进制的手工转换方法 在实现手工转换时,如果对二进制数已经比较熟悉,基本上记住了以2为底的指数值,即二进制数每一位上的权,对十进制数进行转换时,也可以不采用上述规则,基本上可以直接写出来。例如, (45.625)10=32+8+4+1+0.5+0.125=(10 1 1 01. 10 1) 2,即(101101.101)2。 (1105)10 = 1024+81 = 1024+ 64+16 + 1= (1000 10 10001) 2,即(10001010001)2。

用栈实现把十进制转化为八进制

#include #include #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 typedef struct { int *base; int *top; int stacksize; }sqstack; int InitStack(sqstack &s) { s.base=(int *)malloc(STACK_INIT_SIZE*sizeof(int)); if(!s.base) exit(-1); s.top=s.base; s.stacksize=STACK_INIT_SIZE; return 1; } int Pop(sqstack &s,int &e) { if(s.top==s.base) return 0; e=*--s.top; return 1; } 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(-1); s.top=s.base+s.stacksize; s.stacksize+=STACKINCREMENT; } *s.top++=e; return 1; } int StackEmpty(sqstack s) { if(s.top==s.base) return 0; else return 1; }

数据结构与算法基础习题

数据结构与算法基础 一.判断题: 1.数据元素是数据的最小单位。 2.数据结构是带有结构的数据元素的集合。 3.数据结构、数据元素、数据项在计算机中的映像(或表示)分别称为存储结构、结点、数据域。 4.数据项是数据的基本单位。 5.数据的逻辑结构是指各数据元素之间的逻辑关系,是用户按使用需要而建立的。 6.数据的物理结构是指数据在计算机内实际的存储形式。 7.算法和程序没有区别,所以在数据结构中二者是通用的。 二. 数据结构是研究数据的 A 和 B 以及它们之间的相互关系,并对这种结构定义相应的 C ,设计出相应的 D ,而确保经过这些运算后所得到的新结构是 E 结构类型。 供选择答案: A、B:a理想结构b抽象结构c物理结构d逻辑结构 C、D、E:a运算b算法c结构d规则e现在的f原来的 三.从供选择的答案中选取正确的答案天趣下面叙述中的横线上: 1. A 是描述客观事物的数、字符以及所能输入到计算机中并呗计算机程序加工处理的符号的集合。 2. B 是数据的基本单位,即数据集合中的个体。有时一个 B 由若干个_______组成,在这种情况下,称 B 为记录。 C 是数据的最小单位。而由记录所组成的线性表为 D 。 3. E 是具有相同特性的数据元素的集合,是数据的子集。 4. F是带有结构特性数据元素的集合。 5. 被计算机加工的数据元素不是孤立无关的,它们彼此之间一般存在着某种联系。通常将数据元素的这种关系称为G。 6. 算法的计算量的大小称为计算的H。 供选择的答案: A-F:a数据元素b符号c记录d文件e数据f数据项g数据对象h关键字i数据结构 G:a规则b集合c结构d运算 H:a现实性b难度c复杂性d效率 四.分析一下各程序段,并用大“O”表示执行时间为n(正整数)的函数。 1. i:=1 k:=0; WHILE(i<=n-1) DO BEGIN k:=k+10*i;i:=i+1 END

二进制与十进制数间的转换二进制数的四则运算

一、二进制数与十进制数间的转换方法 1、正整数的十进制转换二进制: 要点:除二取余,倒序排列 解释:将一个十进制数除以二,得到的商再除以二,依此类推直到商等于一或零时为止,倒 取将除得的余数,即换算为二进制数的结果 例如把52换算成二进制数,计算结果如图: 52除以2得到的余数依次为:0、0、1、0、1、1,倒序排列,所以52对应的二进制数就是 110100。 由于计算机内部表示数的字节单位都是定长的,以2的幂次展开,或者8位,或者16位, 或者32位....。 于是,一个二进制数用计算机表示时,位数不足2的幂次时,高位上要补足若干个0。本文 都以8位为例。那么: (52)10=(00110100)2 2、负整数转换为二进制 要点:取反加一 解释:将该负整数对应的正整数先转换成二进制,然后对其“取补”,再对取补后的结果加1 即可

例如要把-52换算成二进制: 1.先取得52的二进制:00110100 2.对所得到的二进制数取反:11001011 3.将取反后的数值加一即可:11001100 即:(-52)10=(11001100)2 3、小数转换为二进制 要点:乘二取整,正序排列 解释:对被转换的小数乘以2,取其整数部分(0或1)作为二进制小数部分,取其小数部分,再乘以2,又取其整数部分作为二进制小数部分,然后取小数部分,再乘以2,直到小数部分为0或者已经去到了足够位数。每次取的整数部分,按先后次序排列,就构成了二进制小 数的序列 例如把0.2转换为二进制,转换过程如图: 0.2乘以2,取整后小数部分再乘以2,运算4次后得到的整数部分依次为0、0、1、1,结 果又变成了0.2, 若果0.2再乘以2后会循环刚开始的4次运算,所以0.2转换二进制后将是0011的循环,即: (0.2)10=(0.0011 0011 0011 .....)2 循环的书写方法为在循环序列的第一位和最后一位分别加一个点标注

二进制转换成十进制

二进制数转换成十进制数 二进制的1101转化成十进制 1101(2)=1*2^0+0*2^1+1*2^2+1*2^3=1+0+4+8=13 转化成十进制要从右到左用二进制的每个数去乘以2的相应次方不过次方要从0开始 相反用十进制的13除以2 每除一下将余数就记在旁边 最后按余数从下向上排列就可得到1101 十进制转二进制: 用2辗转相除至结果为1 将余数和最后的1从下向上倒序写就是结果 例如302 302/2 = 151 余0 151/2 = 75 余1 75/2 = 37 余1 37/2 = 18 余1 18/2 = 9 余0 9/2 = 4 余1 4/2 = 2 余0 2/2 = 1 余0 故二进制为100101110 二进制转十进制 从最后一位开始算,依次列为第0、1、2...位 第n位的数(0或1)乘以2的n次方 得到的结果相加就是答案 例如:01101011.转十进制: 第0位:1乘2的0次方=1 1乘2的1次方=2 0乘2的2次方=0 1乘2的3次方=8 0乘2的4次方=0 1乘2的5次方=32 1乘2的6次方=64 0乘2的7次方=0 然后:1+2+0 +8+0+32+64+0=107. 二进制01101011=十进制107.

由二进制数转换成十进制数的基本做法是,把二进制数首先写成加权系数展开式,然后按十进制加法规则求和。这种做法称为"按权相加"法。 二进制转十进制 本人有个更直接的方法,例如二进制数1000110转成十进制数可以看作这样: 数字中共有三个1 即第二位一个,第三位一个,第七位一个,然后十进制数即2的2-1次方+2的3-1次方+2的7-1次方即2+4+64=70 次方数即1的位数减一。如此计算只需要牢记2的前十次方即可在此本人为大家陈述一下:2的0次方是1 2的1次方是2 2的2次方是4 2的3次方是8 2的4次方是16 2的5次方是32 2的6次方是64 2的7次方是128 2的8次方是256 2的9次方是512 2的10次方是1024 2的11次方是2048 2的12次方是4096 2的13次方是8192 2的14次方是16384 2的15次方是32768 在这里仅为您提供前15次方,若需要更多请自己查询。 编辑本段十进制数转换为二进制数 十进制数转换为二进制数时,由于整数和小数的转换方法不同,所以先将十进制数的整数部分和小数部分分别转换后,再加以合并。 十进制转二进制 用2辗转相除至结果为1 将余数和最后的1从下向上倒序写就是结果例如:19.95 转2进制分为两个步骤。 1、小数点前 19/2=9余1 9/2=4 余1

数据结构 栈十进制转八进制的算法详解(已测试过)

实验目的 建立栈实现十进制转八进制 实验内容 编程序并上机调试运行。 建立栈实现十进制转八进制 1.编写程序 //十进制转八进制 #include #include #include #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 typedef struct { int *base; int *top; int stacksize; }sqstack; 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 0; }//构造一个空栈s 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(1);

s->top=s->base+s->stacksize; s->stacksize+=STACKINCREMENT; } *s->top++=e; return 0; }//插入新的元素e为新的栈顶元素 int stackempty (sqstack *s) {if(s->top==s->base) return 1; else return 0; }//若栈s为空栈,则返回1,否则返回0 int pop (sqstack *s,int *e) {if(s->top==s->base) return 1; *e=*--s->top; return 0; }//若栈不为空,则删除s的栈顶元素,用e返回其值,返回OK,否则返回ERROR void conversion (int n) { sqstack s; int e; initstack(&s); printf("请输入一个十进制数:\n"); scanf("%d",&n); while (n){ push(&s,n%8); n=n/8; } printf("\n"); printf("该数的八进制数为:\n"); while(!stackempty(&s)){ pop(&s,&e); printf("%d",e); }

二进制十进制算法(终审稿)

二进制十进制算法 文稿归稿存档编号:[KKUY-KKIO69-OTM243-OLUI129-G00I-FDQS58-

在一种数制中,只能使用一组固定的数字符号来表示数目的大小,具体使用多少个数字符号来表示数目的大小,就称为该数制的基数。例如 : 1.十进制(Decimal ) 基数是10,它有10个数字符号,即0,l ,2,3,4,5,6,7,8,9。其中最大数码是基数减1,即9,最小数码是0。 2.二进制(Binary ) 基数是2,它只有两个数字符号,即0和1。这就是说,如果在给定的数中,除0和1外还有其它数,例如1012,它就决不会是一个二进制数。 3.八进制(Octal ) 基数是8,它有8个数字符号,即0,l ,2,3,4,5,6,7。最大的也是基数减1,即7,最小的是0。 4.十六进制(Hexadecilnal) 基数是16,它有16个数字符号,除了十进制中的10个数可用外,还使用了6个英文字母。它的16个数字依次是0,l ,2,3,4,5,6,7,8,9,A ,B ,C ,D ,E ,F 。其中A 至F 分别代表十进制数的10至15,最大的数字也是基数减1。 既然有不同的进制,那么在给出一个数时,需指明是什么数制里的数。例如:(1010)2,(1010)8,(1010)10,(1010)16所代表的数值就不同。

除了用下标表示外,还可用后缀字母来表示数制。例如ZA4EH,FEEDH, BADH(最后的字母H表示是十六进制数),与(ZA4E) 16,(FEED) 16 ,(BAD) 16 的意义相同。 进制和位权 在数制中,还有一个规则,这就是,N进制必须是逢N进一。 对于多位数,处在某一位上的“l”所表示的数值的大小,称为该位的位权。例如十进制第2位的位权为10,第3位的位权为100;而二进制第2位的位权为2,第3位的位权为4,对于N进制数,整数部分第i位的位权为Ni-1,而小数部分第j位的位权为N-j。 l.十进制数的特点是逢十进一。例如: (1010)10=1×103+0×102+1×101+0×100 2.二进制数的特点是逢二进一。例如: (1010)2=l×23+0×22+l×21+0×20=(10)10 3.八进制数的特点是逢八进一。例如: (1010)8=l×83+0×82+l×81+0×80=(520)10 4.十六进制数的特点是逢十六进一。例如: (BAD)16=11×162+10×l61+13×160=(2989)10 一、二进制的算术运算 1.运算法则 (1)、加法法则 0+0=0

数据结构-栈十进制转八进制的算法详解(已测试过)

数据结构-栈十进制转八进制的算法详解(已测试过)

实验目的 建立栈实现十进制转八进制 实验内容 编程序并上机调试运行。 建立栈实现十进制转八进制 1.编写程序 //十进制转八进制 #include #include #include #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 typedef struct { int *base; int *top; int stacksize; }sqstack; 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 0; }//构造一个空栈s 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(1); s->top=s->base+s->stacksize; s->stacksize+=STACKINCREMENT; } *s->top++=e; return 0; }//插入新的元素e为新的栈顶元素 int stackempty (sqstack *s) {if(s->top==s->base) return 1; else return 0; }//若栈s为空栈,则返回1,否则返回0 int pop (sqstack *s,int *e) {if(s->top==s->base) return 1; *e=*--s->top; return 0; }//若栈不为空,则删除s的栈顶元素,用e返回其值,返回OK,否则返回ERROR void conversion (int n) { sqstack s; int e; initstack(&s); printf("请输入一个十进制数:\n"); scanf("%d",&n); while (n){ push(&s,n%8); n=n/8; } printf("\n"); printf("该数的八进制数为:\n"); while(!stackempty(&s)){ pop(&s,&e);

十进制数转换成二进制数

1.十进制数到二进制之间的转换 对于十进制数正整数转换成二进制的方法是: 算法描述: 1)十进制数作为被除数除2得到的余数0,或者1 余数放在最低位 2)十进制数除2得到的商作新的被除数,如果被除数不是0继续上述过程1);计算方法示例: #include int main() { int dectobin[24]={0}; int i; scanf("%d",&i); int j=0; for(; j<24&&i>=1;j++) { dectobin[j]=i%2;

i=i/2; } j--; for(;j>=0;j--) printf("%d",dectobin[j]); printf("\n"); return 0; } 2、使用库函数实现二十进制到二进制的转换 常写硬件代码的程序猿们,经常会遇到数字的二进制转换问题,尤其是在C 语言定点化的过程中,与二进制的接触更多。但经常会头疼没有一个好点的工具可以帮助我们把一系列十进制数变成二进制表达方式。其实,C语言标准库中就有实现这种功能的函数,下面做简单介绍。 itoa()函数:函数功能是把数据转换成字符串 函数原形:char *itoa(int value, char *string, int radix); 该函数有3个输入参数:第一个参数是要转换的数字,第二个参数是目标字符串,第三个参数是转移数字时所用的基数。 返回值:指向num这个字符串的指针 函数原型:int atoi(const char *nptr); 在上例中,转换基数为10。10:十进制;2:二进制…… 先把num转换为二进制的字符串,再把该字符串转换为整数。

相关文档
最新文档