当前位置: 首页 > news >正文

栈在数组、链表中的应用 ---- 十进制转二进制函数、十进制转八进制函数

有些函数需要提前准备

typedef struct node{
    int data;
    struct node* next;
}node;
typedef struct{
    int size;
    node* top;
}toplist;

//进栈函数,传入第一个参数为记录栈顶的结构体指针,第二个参数为要进去的节点指针
bool push(toplist* managelist,node* new);

//出栈函数,传入第一个参数为记录栈顶的结构体指针,第二个参数出栈节点的记录的数,用指针记录
bool pop(toplist* managelist,int* num);

//插入节点且将num赋值给该节点的数值
node* iniList(int num);

//记录栈顶结构体函数初始化,size = 0,top->NULL
toplist *managelist_init(void);

栈在单向链表中,并实现十进制转为二进制的操作

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

typedef struct node{
    int data;
    struct node* next;
}node;
typedef struct{
    int size;
    node* top;
}toplist;

bool push(toplist* managelist,node* new);
bool pop(toplist* managelist,int* num);
node* iniList(int num);
toplist *managelist_init(void);


int main(void)
{
    int data = -1;
    toplist* managelist = managelist_init();
//此为测试代码,可以删除或者忽略
/*
    push(managelist,iniList(1));
    printf("%p\n",managelist->top);
    push(managelist,iniList(2));
    printf("%p\n",managelist->top);
    push(managelist,iniList(3));
    printf("%p\n",managelist->top);
    push(managelist,iniList(4));
    printf("%p\n",managelist->top);
    printf("%d \t %d \t %p\n",data,managelist->size,managelist->top);
    printf("before pop!\n");
    pop(managelist,&data);
    printf("%d \t %d \t %p\n",data,managelist->size,managelist->top);
*/

    //无符号类型,方便转化负数的二进制
    unsigned int number = -1;
    while(1)
    {
        printf("enter a decimal number:");
        scanf("%d",&number);
        if(number == 0)
        {
            push(managelist,iniList(number)); 
        }
        else
        {
            while(number != 0)
            {
                push(managelist,iniList(number%2));
                number = number/2;
            }
        }
        while(managelist->size != 0)
        {
            pop(managelist,&data);
            printf("%d",data);
        }
        printf("\n");


    }

    return 0;
}

bool push(toplist* managelist,node* new)
{
    new->next = managelist->top;
    managelist->top = new;
    managelist->size++;
    return true;
}

bool pop(toplist* managelist,int* num)
{
    if(managelist->top == NULL || managelist->size == 0)
    {
        return false;   
    }
    node* tmp = managelist->top;
    *num = managelist->top->data;
    managelist->top = managelist->top->next;
    managelist->size--;
    free(tmp);
    return true;

}

node* iniList(int num)
{
    node* p = (node*)malloc(sizeof(node));
    if(p == NULL)
    {
        printf("allot space is failure!\n");
        return NULL;
    }
    p->data = num;
    p->next = NULL;
    return p;

}

toplist *managelist_init(void)
{
    toplist* p = (toplist*)malloc(sizeof(toplist));
    if(p == NULL)
    {
        printf("allot space is failure!\n");
    }
    p->size = 0;
    p->top = NULL;

    return p;
}


栈在数组中实现

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#define HIGH 6

int stack_arr[HIGH] = {0};
int flag = -1;

bool push(int stack_arr[],int num);
bool pop(int stack_arr[],int* num);

int main(void)
{
    int num = -1;
    push(stack_arr,1);
    push(stack_arr,2);
    push(stack_arr,4);
    push(stack_arr,3);
    pop(stack_arr,&num);
    printf("%d \t %d\n",num,flag);
    return 0;
}

bool push(int stack_arr[],int num)
{
    if(flag == HIGH-1)
    {
        return false;
    }
    stack_arr[++flag] = num;
    return true; 

}
bool pop(int stack_arr[],int* num)
{
    if(flag == -1)
    {
        return false;
    }
    *num = stack_arr[flag--];
    return true;

}

十进制转二进制函数、十进制转八进制函数:

void dec_to_bin(toplist* managelist,unsigned int number)
{
    int data = -1;
    if(number == 0)
    {
        push(managelist,iniList(number)); 
    }
    else
    {
        while(number != 0)
        {
            push(managelist,iniList(number%2));
            number = number/2;
        }
    }
    while(managelist->size != 0)
    {
        pop(managelist,&data);
        printf("%d",data);
    }
    printf("\n");
}

void dec_to_oct(toplist* managelist,unsigned int number)
{
    int data = -1;
    if(number == 0)
    {
        push(managelist,iniList(number)); 
    }
    else
    {
        while(number != 0)
        {
            push(managelist,iniList(number%8));
            number = number/8;
        }
    }
    while(managelist->size != 0)
    {
        pop(managelist,&data);
        printf("%d",data);
    }
    printf("\n");
}

直接使用

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

typedef struct node{
    int data;
    struct node* next;
}node;
typedef struct{
    int size;
    node* top;
}toplist;

bool push(toplist* managelist,node* new);
bool pop(toplist* managelist,int* num);
node* iniList(int num);
toplist *managelist_init(void);

void dec_to_bin(toplist* managelist,unsigned int number);
void dec_to_oct(toplist* managelist,unsigned int number);


int main(void)
{
    int data = -1;
    toplist* managelist = managelist_init();

    unsigned int number = -1;
    while(1)
    {
        printf("enter a decimal number:");
        scanf("%d",&number);
        dec_to_bin(managelist,number);
        dec_to_oct(managelist,number);
    }

    return 0;
}

bool push(toplist* managelist,node* new)
{
    new->next = managelist->top;
    managelist->top = new;
    managelist->size++;
    return true;
}

bool pop(toplist* managelist,int* num)
{
    if(managelist->top == NULL || managelist->size == 0)
    {
        return false;   
    }
    node* tmp = managelist->top;
    *num = managelist->top->data;
    managelist->top = managelist->top->next;
    managelist->size--;
    free(tmp);
    return true;

}

node* iniList(int num)
{
    node* p = (node*)malloc(sizeof(node));
    if(p == NULL)
    {
        printf("allot space is failure!\n");
        return NULL;
    }
    p->data = num;
    p->next = NULL;
    return p;

}

toplist *managelist_init(void)
{
    toplist* p = (toplist*)malloc(sizeof(toplist));
    if(p == NULL)
    {
        printf("allot space is failure!\n");
    }
    p->size = 0;
    p->top = NULL;

    return p;
}

void dec_to_bin(toplist* managelist,unsigned int number)
{
    int data = -1;
    if(number == 0)
    {
        push(managelist,iniList(number)); 
    }
    else
    {
        while(number != 0)
        {
            push(managelist,iniList(number%2));
            number = number/2;
        }
    }
    while(managelist->size != 0)
    {
        pop(managelist,&data);
        printf("%d",data);
    }
    printf("\n");
}

void dec_to_oct(toplist* managelist,unsigned int number)
{
    int data = -1;
    if(number == 0)
    {
        push(managelist,iniList(number)); 
    }
    else
    {
        while(number != 0)
        {
            push(managelist,iniList(number%8));
            number = number/8;
        }
    }
    while(managelist->size != 0)
    {
        pop(managelist,&data);
        printf("%d",data);
    }
    printf("\n");
}

相关文章:

  • 【音视频 | AAC】AAC编码库faac介绍、使用步骤、例子代码
  • 【AD】5-16 泪滴的添加
  • Python 2025:AI霸主地位受挑战?最新技术趋势与未来展望
  • 一周热点-Claude 3.7 Sonnet-在响应和思考模型之间切换
  • 电脑如何在系统默认的壁纸中切换自己喜欢的
  • 从技术角度看大语言模型进化技术路线与落地应用详解:未来的最佳实践方向是什么?
  • 什么是Hash碰撞?怎么解决哈希碰撞?
  • vue安装stylelint
  • 在 Spring Boot 2.7.x 中引入 Kafka-0.9 的实践
  • 数学之约数个数定理-阶乘约数
  • # 深入理解RNN(一):循环神经网络的核心计算机制
  • Android15 Camera框架中的StatusTracker
  • OpenCV常用函数以及使用场景
  • Qt开发:nativeEvent事件的使用
  • STM32-I2C通信外设
  • 2025最新群智能优化算法:海市蜃楼搜索优化(Mirage Search Optimization, MSO)算法求解23个经典函数测试集,MATLAB
  • TinyWebServer项目笔记——01 线程同步机制封装类
  • 模型微调——模型性能提升方法及注意事项(自用)
  • 【微知】Centos如何迁移到Anolis系统的失败记录?(yum -y install centos2anolis、centos2anolis.py)
  • 正版Windows10/11系统盘制作详细教程
  • 用cms创建自己带数据库的网站/百度快照替代
  • 公司备案 网站主办者名称/大连网站搜索排名
  • 衡阳做淘宝网站建设/看广告赚钱的平台
  • 网银汇款企业做网站用途写什么/友情链接2598
  • 佛山网站建设运营/微信朋友圈广告30元 1000次
  • 营销型网站建设需要备案吗/百度下载安装