//栈的顺序表示实现
#include <stdio.h>
#include <stdlib.h>
//栈初始大小
#define STACK_INIT_SIZE 100
//栈的增长大小
#define STACKINCREMENT 10
#define OVERFLOW 0
#define ERROR 0
#define FALSE 0
#define TRUE 1
typedef int Status;
typedef int SElemType;
typedef int boolean;
//栈的顺序定义
typedef struct{
SElemType *bese; //栈底指针,在栈构造之前和析构之后值都为NULL
SElemType *top; //栈顶指针
int stacksize; //栈的大小
}Stack;
//初始化栈
Stack InitStack()
{
Stack S;
S.bese = (SElemType *)malloc(sizeof(SElemType) * STACK_INIT_SIZE);
if(!S.bese)
exit(OVERFLOW);
S.top = S.bese;
S.stacksize = STACK_INIT_SIZE;
return S;
}
//若栈不为空,则返回栈顶元素e
Status GetTop(Stack S)
{
//判断是否为空栈
if(S.bese == S.top)
return ERROR;
//非空栈的栈顶指针始终是在栈顶元素的下一个位置上
return *(S.top - 1);
}
//入栈操作,若栈满,则增加存储空间
Stack push(Stack S, SElemType e)
{
//判断栈是否已经满
if(S.top - S.bese >= STACK_INIT_SIZE)
{
S.bese = (SElemType *)realloc(S.bese, sizeof(SElemType) * (S.stacksize + STACKINCREMENT));
if(!S.bese)
exit(OVERFLOW);
S.top = S.bese + S.stacksize; //计算栈顶指针
S.stacksize += STACKINCREMENT;
}
*S.top++ = e;
return S;
}
//入栈操作
Stack pop(Stack S)
{
//空栈
if(S.bese == S.top)
{
printf("此栈是空栈!");
return S;
}
printf("%d", * --S.top);
return S;
}
//销毁栈
Stack DestoryStack(Stack S)
{
S.bese = NULL;
return S;
}
//清空栈中数据
Stack ClearStack(Stack S)
{
S.top = S.bese;
return S;
}
//判断栈是否是空栈
boolean StackEmpty(Stack S)
{
if(S.bese == S.top)
return TRUE;
return FALSE;
}
//返回栈的长度
int StackLength(Stack S)
{
return S.top - S.bese;
}
//计算十进制数的二进制
int main()
{
//初始化栈
Stack S = InitStack();
int N;
printf("请输入数N:");
scanf("%d", &N);
while(N)
{
S = push(S, N % 2);
N = N / 2;
}
while(!StackEmpty(S))
{
S = pop(S);
}
printf("\n");
//销毁栈
DestoryStack(S);
return 0;
}
分享到:
相关推荐
### C语言顺序栈实现十进制到二进制、八进制、十六进制的转换 #### 一、概述 本篇文章将详细介绍如何使用C语言中的顺序栈来实现十进制数字向二进制、八进制以及十六进制的转换。通过分析给出的代码示例,我们将...
总结起来,从十进制到八进制的转换是通过除8取余法完成的,利用了C语言中的基本算术运算和数据结构栈。了解和掌握这种转换对于理解和编写计算机程序至关重要,特别是对于理解底层计算机制的C语言程序员。在实际编程...
总结来说,利用栈实现10进制到2进制的转换是一种巧妙且直观的方法,它利用了数据结构的特性来简化复杂的计算过程。通过对栈的操作,我们可以将计算过程抽象化,使得代码更简洁,同时保持了良好的性能。在学习和实践...
这篇博文“Stack练习:十进制正整数转化成二进制”聚焦于将十进制数转换为二进制数的过程,这对于理解计算机内部运作机制至关重要,因为计算机是以二进制(0和1)为基础进行数据处理的。在本文中,作者分享了一种...
### 将非负十进制整数转化为八进制 #### 概述 在计算机科学领域,数据转换是一项基本而重要的任务。其中,将非负十进制整数转化为八进制是常见的需求之一,尤其是在低级编程语言如C语言中。本篇文章将详细介绍这一...
本文将详细探讨如何利用栈这种数据结构来实现二进制、八进制和十六进制之间的转换。栈是一种具有“后进先出”(LIFO)特性的数据结构,非常适合用于解决此类问题。 首先,我们要理解数制的基本概念。数制是表示数字...
本篇文章将详细讲解如何利用栈的数据结构,实现10进制到任意进制(包括但不限于二进制)的转换,并探讨这一过程中的关键知识点。 首先,我们需要理解栈(Stack)这一数据结构。栈是一种后进先出(LIFO,Last In ...
1. **十进制转二进制**:利用栈辅助,每次将十进制数除以2的余数压栈,直到商为0。然后依次弹栈,得到的数字就是二进制表示。 2. **二进制转十进制**:将二进制数按位权值压栈,然后逐个弹栈并累加,得到十进制结果...
从后往前每三位一组,缺位处用0填补,然后按十进制方法进行转化 ; 例如:1 -> 001 3 -> 011 然后我们将结果按从下往上的顺序书写就是:11001,那么这个11001就是八进制31的二进制形式。 ### 八进制转十进制 八...
本课程设计的目标是利用栈和数组这两种数据结构,实现任意给定数的10进制与其他进制之间的转换,确保转换过程中无错误。 首先,我们要理解不同的进制系统。最常见的有二进制(Binary)、八进制(Octal)、十进制...
通过以上步骤和代码实现,我们可以看到,利用栈的数据结构特性,能够高效且直观地实现数制转换的任务,特别是在从高基数(如十进制)转换到低基数(如八进制或二进制)的情况下,栈的“后进先出”特性确保了转换后的...
实验二栈的应用(数制转换)主要探讨了如何利用栈这一数据结构来实现十进制整数到其他任意进制整数的转换。在计算机科学中,数据的表示和转换是非常基础且重要的概念,而栈作为一种特殊的线性数据结构,具有后进先出...
反转二进制数后再计算十进制数时,将数组元素乘以相应的2的幂并累加。 2. **实现简易字符串压缩算法** 这个题目要求对一个由小写字母或大写字母组成的字符串进行压缩,将连续重复的字母替换为其出现次数加字母。`...
1. **将byte类型十进制数转化为颠倒二进制并计算对应十进制值** 这个问题涉及到将一个byte类型的十进制数转换为二进制,然后颠倒二进制位,最后再将其转换回十进制。`MyByte` 类包含两个方法:`tenToSecond()` 和 `...
例如,从十进制转换到二进制时,可以通过连续除以2并记录余数来完成,每次除法得到的余数就是二进制数的位,按照栈的特性,最后得到的余数将是最高位,最先被压入栈,而最开始的余数将是最低位,最后被弹出。...
2.5.1 中缀表达式转后缀表达式:利用栈的数据结构,将中缀表达式(如2+3*4)转换为后缀表达式(如2 3 4 * +)。 2.5.2 后缀表达式转换为二叉树:将后缀表达式转化为一棵二叉树,便于后续的计算操作。 2.5.3 遍历...
"进制转化.c"可能是实现了不同进制之间的转换,如二进制、八进制、十进制和十六进制之间的转换,这对于计算机系统理解和编程非常重要。 最后,"关于Gets函数和Puts函数的使用.docx"可能是一个文档,详细解释了这两...
数制转换是计算机科学中不可或缺的基础知识,它涉及到不同进制之间的相互转化,包括二进制、八进制、十进制和十六进制等。本文将深入探讨数制转换的基本原理和实现方法,特别关注在数据结构课程设计中的应用。 一、...
在计算机中,信息被转化为二进制的形式,因为二进制是最基础且最易于物理实现的数制。以下是关于这一主题的详细阐述: 首先,我们要理解为什么计算机选择使用二进制。二进制系统只使用两个符号,0和1,这使得电子...
数制转换是计算技术中的基本操作,包括二进制、八进制、十进制和十六进制等不同基数系统间的转换。例如,从十进制转二进制通常采用除2取余法,而从二进制转十进制则可以使用按权展开求和的方法。 在这个C++源程序中...