精华内容
下载资源
问答
  • 为什么感觉我数据结构【java】一直入不了门,看能看懂就完全不摘到该怎么,只知道用什么,但代码不出来?</p>
  • MOOC中陈老师习题选讲中讲的方法,听懂了但是还是不会。看了这个博客的《数据结构》02-线性结构3 Reversing Linked List 1.数组和变量不能重名 ...3.这部分将数组反转的代码看懂了,但不知...

    MOOC中陈老师习题选讲中讲的方法,听懂了但是还是不会写。看了这个博客写的《数据结构》02-线性结构3 Reversing Linked List

    1.数组和变量不能重名
    2.list[i+1]原来错写成这个next[list[i]]:因为我们已经将链表反转,这个时候的顺序已经变了,next数组中存储的仍然是之前的顺序所以不行(这样的傻事都能做出来,哭)
    3.这部分将数组反转的代码,看懂了,但不知道咋想出来的。

        for(int i=0;i<sum-sum%K;i+=K){
            for(int j=0;j<K/2;++j){
                int t = list[i+j];
                list[i+j] = list[i+K-j-1];
                list[i+K-j-1] = t;
            }
    
    #include<stdio.h>
    #define MAXSIZE 100005
    int main(){
        int first,N,K,sum=0;//忘记初始化sum为0了
        int data[MAXSIZE];  //数组和变量不能重名?
        int next[MAXSIZE];
        int list[MAXSIZE];
        scanf("%d %d %d",&first,&N,&K);
        
        for(int i=0;i<N;++i){
            int address,value,nextadd; //把他们定义在函数里面比较好
            scanf("%d %d %d",&address,&value,&nextadd);
            data[address] = value;
            next[address] = nextadd;
        }    
        while(first!=-1){
        //这个sum的值可以被改变,是因为while不算是函数么
            list[sum++] = first;
            first = next[first];
        }
        for(int i=0;i<sum-sum%K;i+=K){
            for(int j=0;j<K/2;++j){
                int t = list[i+j];
                list[i+j] = list[i+K-j-1];
                list[i+K-j-1] = t;
            }
        }
        for(int i=0;i<sum-1;++i){
    //list[i+1]原来错写成这个next[list[i]]:因为我们已经将链表反转,这个时候的顺序已经变了,next数组中存储的仍然是之前的顺序所以不行
            printf("%05d %d %05d\n",list[i],data[list[i]],list[i+1]);
        }
        printf("%05d %d -1\n",list[sum-1],data[list[sum-1]]);
        return 0;    
    }
    
    展开全文
  • 前言:上学期的数据结构课设的,拿了优秀(代价就是爆肝完拉了两天肚子),代码如下,功能十分齐全。其实只要明白进制转换的过程就能写出来,下面代码分别实现了 1.十进制数转换成任意进制数 2.任意进制数转换成十...

    进制转换问题

    前言:上学期的数据结构课设写的,拿了优秀(代价就是爆肝完拉了两天肚子),代码如下,功能十分齐全。其实只要明白进制转换的过程就能写出来,下面代码分别实现了

    1.十进制数转换成任意进制数

    2.任意进制数转换成十进制数。

    3.任意进制数转换成任意进制数。

    注意!!!这些数可以是整数也可以是小数,进制最高能转换到63进制(10对应A,11对应B,依次按照ascll码表往后对照知道结束
    注释的也比较齐全,主要用顺序栈写的。看不懂的地方可以评论留言或者私信。

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <math.h>
    #define Stack_Size 100
    #define Max_Size 100
    #define ok 1
    #define no 0
    int CTI(char a);
    typedef int StackElementType;
    /********************************************************
    ********************创建所需求栈函数********************
    ********************************************************/
    typedef struct
    {
        StackElementType elem[Stack_Size];
        int top;
        int base;
    }SeqStack;
    
    void InitStack(SeqStack *S)//初始化栈
    {
        S->top=0;
        S->base=0;
    }
    
    int Push(SeqStack *S,StackElementType x)//进栈,其中x代表的是进栈元素
    {
        if(S->top==Stack_Size-1)
            return no;
        S->top++;
        S->base=1;
        S->elem[S->top]=x;
        return ok;
    }
    
    
    int Pop(SeqStack *S/*,StackElementType *x*/)//出栈,x传地址取出值
    {
        if(S->top==0)
            return no;
        else
        {
            S->top--;
            return S->elem[S->top];
        }
    }
    
    int GetTop(SeqStack *S,StackElementType *x)//得到栈顶元素,与出栈操作区别的只取不去
    {
        if(S->top==-1)
            return no;
        else {
            *x=S->elem[S->top];
            return ok;
        }
    }
    /****************************************************************
    *******************分两部分转换进制的功能函数*******************
    *****************************************************************/
    void FTX(double bi,int x)
    {
        printf(".");
        int i,ch,n=0;
        //printf("bi::%lf  %d  ",bi,x);
        while(bi!=0&&n<8)
        {
            bi=x*bi;
            i=(int)bi;
            //printf("   i:%d    ",i);
            bi-=i;
            if(i>9)
            {
                ch='A'+i-10;
                printf("%c",ch);
            }
            else
                printf("%d",i);
            n++;
        }
    }
    void ITX(int ai,int x)
    {
        int z=0,i=0;
        //printf("--%d     %d--",ai,x);
        int zi[Max_Size];
        while(ai)
        {
            z=ai%x;
            ai/=x;
            zi[i++]=z;
        }
        i--;
        for(;i>=0;i--)
        {
            if(zi[i]>9)
                printf("%c",zi[i]+'A'-10);
            else printf("%d",zi[i]);
        }
    }
    /****************************************************************
    **************十进制数转换成任意进制数功能函数******************
    *****************************************************************/
    void TTA(int test)//十进制数转换成任意进制数功能函数
    {
        int ex;
        int count=0,i,j,ai=0;
        double bi=0;
        char a[Max_Size];
        SeqStack S;
        InitStack(&S);
        printf("请输入一个数:");
        scanf("%s",a);
        for(ex=0;ex<strlen(a);ex++)
        {
            if(a[ex]=='.')//防止用小数点进行比较
                continue;
            else if(a[ex]>=(9+'0'))
            {
                printf("输入有误,强制退出程序\n");
                exit(0);
            }
        }
        printf("请输入要转换的进制数:");
        scanf("%d",&i);
        printf("转换之后的数:");
        for(j=0;j<strlen(a);j++)//101.1
        {
    
            if(a[j]=='.')
            {
                count=j;
                continue;
            }
            Push(&S,a[j]);
        }
        if(count==0)//假如没有输入小数,防止卡死,令count等于j,直接跳过第一个取小数部分的while
            count=j;
        while(S.top!=count)//得到bi
        {
            bi=bi*0.1+(S.elem[S.top]-'0')*0.1;
            Pop(&S);
        }
        while(S.base!=count+1)//得到ai
        {
            ai=ai*10+(S.elem[S.base]-'0');
            S.base++;
        }
        //printf("ai::%d   ",ai);
        ITX(ai,i);
        if(ai==0)
            printf("%c",'0');
        if(bi!=0)
            FTX(bi,i);
        printf("\n");
    }
    /****************************************************************
    *******************任意进制数转换为十进制数*********************
    *****************************************************************/
    void NTT(test)
    {
        int ex;
        int i,j;
        char a[Max_Size];
        double z=0;
        int count = 0;
        SeqStack S;
        InitStack(&S);
        printf("请输入要转换的数字:");
        scanf("%s",a);
        printf("请输入该数字的进制数:");
        scanf("%d",&i);
        for(ex=0;ex<strlen(a);ex++)
        {
            if(a[ex]=='.')//防止用小数点进行比较
                continue;
            else if(a[ex]>(i+'0'))
            {
                printf("输入有误,强制退出程序\n");
                exit(0);
            }
        }
        for(j=0;j<strlen(a);j++){//101.101
            if(a[j]=='.')
            {
                count = -1*(strlen(a) - j - 1);
    
                continue;
            }
            Push(&S,a[j]);
        }
        while(S.top!=0)
        {
            z+=pow(i,count++)*CTI(S.elem[S.top--]);
            //printf("%d   %lf    %d\n",count,z,S.top);
    
        }
        printf("转换之后的数:%f\n",z);
        printf("\n");
    }
    int CTI(char a)
    {
        if(a>='A'&&a<='Z')
            {
                a=a-'A'+1+9;
            }
            else
            {
                a=a-'0';
            }
            return a;
    }
    /********************************************************
    ******************任意进制转任意进制********************
    *********************************************************/
    //先将任意进制数转换为十进制
    //再将十进制数转换为所需进制数
    double XTT(int x)//x是初始进制值
    {
        int ex;
        int j;
        char a[Max_Size];
        double z=0;
        int count = 0;
        SeqStack S;
        InitStack(&S);
        printf("请输入要转换的数字:");
        scanf("%s",a);
        for(ex=0;ex<strlen(a);ex++)
        {
            if(a[ex]=='.')//防止用小数点进行比较
                continue;
            else if(a[ex]>(x+'0'))
            {
                printf("输入有误,强制退出程序\n");
                exit(0);
            }
        }
        for(j=0;j<strlen(a);j++){//101.101
            if(a[j]=='.')
            {
                count = -1*(strlen(a) - j - 1);
    
                continue;
            }
            Push(&S,a[j]);
        }
        while(S.top!=0)
        {
            z+=pow(x,count++)*CTI(S.elem[S.top--]);
        }
        return z;
    }
    
    void TTX(double x,int n)//x==a,n==i
    {
        int ai=0;
        double bi=0;
        printf("最终转换之后的数:");
        ai=(int)x;
        bi=x-ai;
        ITX(ai,n);
        if(ai==0)
            printf("%c",'0');
        if(bi!=0)
            FTX(bi,n);
        printf("\n");
    }
    
    
    /********************************************************
    ***********************主函数部分************************
    *********************************************************/
    
    int main()
    {
        int menu,test=1;
        //int n=1;
        while(1)
        {
            printf("**********************《欢迎使用进制转换系统》********************\n");
            printf("*                                                                *\n");
            printf("*             <请参照目录输入您想实现的功能函数的编号>           *\n");
            printf("*  *-*     *-*     1.十进制数转换为任意进制数     *-*   *-*      *\n");
            printf("*  *-*     *-*     2.任意进制数转换为十进制数     *-*   *-*      *\n");
            printf("*  *-*     *-*     3.任意进制数转换为任意进制数   *-*   *-*      *\n");
            printf("*  *-*     *-*     4.清理界面                     *-*   *-*      *\n");
            printf("*  *-*     *-*     5.退出系统                     *-*   *-*      *\n");
            printf("******************************************************************\n");
            printf("------->");
            scanf("%d",&menu);
            printf("\n");
            switch(menu)
            {
            case 1:
                {
                    printf("~~~~~~~~~~~~~~~~现在是十进制数转换为任意进制数模式~~~~~~~~~~~~~~\n");
                    TTA(test);
                    break;
                }
            case 2:
                {
                    printf("~~~~~~~~~~~~~~~现在是任意进制数转换为十进制数模式~~~~~~~~~~~~~~\n\n");
                    NTT(test);
                    break;
                }
            case 3:
                {
                    printf("~~~~~~~~~~~~~~~现在是任意进制数转换为任意进制数数模式~~~~~~~~~~~~~\n");
                    int m,n;//m代表初始进制,n代表最终进制,x代表中间值
                    double x;
                    printf("请输入初始进制值:");
                    scanf("%d",&m);
    
                    x=XTT(m);
    
                    printf("请输入最终进制值:");
                    scanf("%d",&n);
                    TTX(x,n);
                    break;//任意进制转任意进制
                }
            case 4:
                {
                    system("cls");
                    break;
                }
            case 5:exit(0);break;
            default:printf("!!!警告:输入编号有误,请检查后重新输入 !!!\n\n");
            }
        }
        return 0;
    }
    
    
    
    

    以上就是全部的代码啦,贴过去就能运行,祝每天过的开心。

    展开全文
  • 很多新手系统全套学完就业班之后,其实能力还是不错的,对常用的技术栈也都会理解,也能看别人的代码、模块、架构等,但是我发现有些新手一遇到业务就非常的茫然,好像一下子就知道怎么去了 1、对业务的理解...

    很多新手系统全套学完就业班之后,其实能力还是不错的,对常用的技术栈也都会理解,也能看得懂别人的代码、模块、架构等,但是我发现有些新手一遇到业务就非常的茫然,好像一下子就不知道怎么去写了

    1、对业务的理解,其实90%的功能开发出来的目的就是:显示,就算有其它的逻辑处理,也是为了这个显示做铺垫的,这也是很多后端和前端的工作,后端为了能够做到”显示“这个目标,需要定义好数据结构(一般单列和双列集合就可以搞定),需要进行逻辑处理转换得到需要的数据,需要返回合乎规则的数据,你如果实在不理解,就假想一下存到数据库中的数据表应该是这个样子,为了能把这一行行数据存到数据表中,我应该怎么样才能实现这个目标,这样数据存到数据库中就完成任务了,以后有的是办法从数据库中取业务数据去达成目标

    2、对数据的理解,现在很多的项目都是前后端分离或者接近于前后端分离,所以对数据的理解尤为重要,就算是以前的模板式混合开发,其实也是异曲同工,有了各种各样的数据,展现层才能利用这个数据去做一些事情,能见到的数据无非就是类似于下面这样的,为了达到这样的数据返回,你后端就必须定义一个公共响应返回类,然后data为参数传进去进行逻辑处理,然后这个data应该在后端是怎样的格式,为了达到这样的格式,我需要首先就定义什么数据结构,定义完了数据,我应该怎么样写代码把合乎规则的数据填充进去

    {
        "code": 100001,
        "message": "success",
        "data": {
            "pageNum": 1, //可省略
            "pageSize": 10, //前端传过来的参数,可省略
            "totalPage": 1, //可省略
            "totalCount": 7, //不可省略
            "userlist": [
                {
                    "id": 15,
                    "username": "小龙in武汉",
                    "password": "$2a$10$Gk/8bByeKfEciTnXWHWtxukGKG6zASwfZ1xNtIA5LseNBzcAwYM3G",
                    "icon": null,
                    "email": null,
                    "nickName": null,
                    "note": null,
                    "createTime": "2020-10-27T01:08:44.000+00:00",
                    "loginTime": null,
                    "status": 1
                },
                {
                    "id": 16,
                    "username": "小龙in武汉1",
                    "password": "$2a$10$GG10gre7x3DqlWclvdpsA.k1nugTKG6kcfpptM5Lz9iMLa98nK6ru",
                    "icon": null,
                    "email": null,
                    "nickName": null,
                    "note": null,
                    "createTime": "2020-10-27T01:31:46.000+00:00",
                    "loginTime": null,
                    "status": 1
                },
                {
                    "id": 17,
                    "username": "小龙in武汉2",
                    "password": "$2a$10$MkWmndKluhBRrIkmU391Su7xUwZ5frg.wZEqgU9654LpKvdtaHW.q",
                    "icon": null,
                    "email": null,
                    "nickName": null,
                    "note": null,
                    "createTime": "2020-10-27T01:31:48.000+00:00",
                    "loginTime": null,
                    "status": 1
                },
                {
                    "id": 18,
                    "username": "小龙in武汉3",
                    "password": "$2a$10$IinIEN2CF3gyme2hf7Hy7uqo6dJsMiFSqDFJRIO/a1gm18CVp8JPi",
                    "icon": null,
                    "email": null,
                    "nickName": null,
                    "note": null,
                    "createTime": "2020-10-27T01:31:50.000+00:00",
                    "loginTime": null,
                    "status": 1
                }
            ]
        }}
    

    3、形参和返回值

    这两个概念大家都知道,但是跟业务结合起来总是云里雾里,不清楚自己要干嘛,形参就是你需要的条件,我不需要关心这个条件是谁传的,我也不关心这个形参到底传入实参到底会长啥样,有了这个形参我才能继续干活,大不了为了完成任务或者为了不等其他的人磨叽不跟我联合调试,我自己假设定义一个符合形参的最简单的实参,然后去处理逻辑,然后去处理返回返回值,后续再跟别人无缝对接

    4、不要创新

    有的新手或老手进公司,第一眼看的肯定是项目,项目的总体设计,代码的风格套路,各个模块的布局,这些都是固定好的,可以理解为:八股文,你只需要模仿他们,结构不变然后去修修改改代码,就可以跟他们一样,就可以被他们所接纳,不要自己去独创一些东西,不然就会被你的同事嫌弃的

    5、抽象思维能力一定要提高一点

    抽象程度越高,你越接近事物本质

    抽象程度越低,你的思维会被各种纷乱的细节缠绕

    展开全文
  • firefly兄你出点代码出来看看!呵呵,我知道咋!他只是让我想。也没提示,说提示就没意思了!呵呵,哪位高人来提示一下! [b]问题补充:[/b] hashtable?哦,那是以前的想法!现在就是想用arraylist。 firefly...
  • 定义 数组是一种排列有序的数据结构,包含于数组中的变量被称为数组的元素, 它们都有相同的类型。 数组声明 int [] array1 = new int[5]; int [,,] array3 = new int[10,20,30]; int [] array1 = new int[] {1,2,4}...
  • 我虽然已经有多年不写代码了,但这本书的时候,让我又重新感受到做程序员的乐趣:用代码建设属于自己的系统,让电脑听从自己的指令,对系统的每个部分都了如指掌。 黑客(hacker)实际是褒义词,维基百科的解释是...
  • 我虽然已经有多年不写代码了,但这本书的时候,让我又重新感受到做程序员的乐趣:用代码建设属于自己的系统,让电脑听从自己的指令,对系统的每个部分都了如指掌。 黑客(hacker)实际是褒义词,维基百科的解释是...
  • 不要跟我说你想进去,如果给你一个这样的平台,不管是薪资待遇还是接触的高度来说,对我们程序员来说都是一个机会,我以前有一个同事,就是从阿里出来的,原来是p7,后面来了我们这里当了技术总监,人家的代码写的...

    前言

    每个程序员都有一个梦想,那就是进一线互联网公司深造,不要跟我说你不想进去,如果给你一个这样的平台,不管是薪资待遇还是接触的高度来说,对我们程序员来说都是一个机会,我以前有一个同事,就是从阿里出来的,原来是p7,后面来了我们这里当了技术总监,人家的代码写的让你不得不服。

    今天我特意收集了最新面试题,虽然花了一些时间,经过整理之后分享给大家,大家一起来看看什么互联网面试题,一起来认识一下,看看自己能掌握多少!

    NDK模块

    一、C#与C++

    1.C#与C++数据类型归纳总结
    2.C#与C++内存结构与管理
    3.预处理指令、Typede
    4.C与C++结构体、共同体
    5.指针,智能指针、方法指针
    6.C/C++指针
    7.C/C++多线程机制
    8.C/C++类函数与初始化列表

    二、JNI开发

    1.静态与动态注册
    2.JNI方法签名与Java通信
    3.JNI开发之局部引用、全局引用和弱全局引用

    三Native、开发工具

    1.编译器、打包工具与分析器
    2.静态库与动态库
    3.CPU架构与注意事项
    4.构建脚本与构建工具
    5.交叉编译移植
    6.AS构建NDK项目

    尾声

    面试成功其实都是必然发生的事情,因为在此之前我做足了充分的准备工作,不单单是纯粹的刷题,更多的还会去刷一些Android核心架构进阶知识点,比如:JVM、高并发、多线程、缓存、热修复设计、插件化框架解读、组件化框架设计、图片加载框架、网络、设计模式、设计思想与代码质量优化、程序性能优化、开发效率优化、设计模式、负载均衡、算法、数据结构、高级UI晋升、Framework内核解析、Android组件内核等。

    不仅有学习文档,视频+笔记提高学习效率,还能稳固你的知识,形成良好的系统的知识体系。这里,笔者分享一份从架构哲学的层面来剖析的视频及资料分享给大家梳理了多年的架构经验,筹备近6个月最新录制的,相信这份视频能给你带来不一样的启发、收获。

    Android进阶学习资料库

    一共十个专题,包括了Android进阶所有学习资料,Android进阶视频,Flutter,java基础,kotlin,NDK模块,计算机网络,数据结构与算法,微信小程序,面试题解析,framework源码!

    image

    大厂面试真题

    PS:之前因为秋招收集的二十套一二线互联网公司Android面试真题 (含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)

    《2017-2020字节跳动Android面试历年真题解析》

    如果需要PDF版本可以自行领取!

    95%E9%9D%A2%E8%AF%95%E6%8B%BF%E9%AB%98%E8%96%AA%EF%BC%81.md)**

    展开全文
  • 关于代码的一些问题

    2020-12-01 16:57:35
    不仅其他读者看不懂代码,UP自己过几个月之后再来阅读代码也会毫无疑问会很费劲。但可读性的问题都还不是最严重的。为了压缩代码而在代码中使用的各种各样的所谓“骚操作”使得代码的健壮性根本无从谈起。 ...
  • 1.2 关系数据结构 6 1.2.1 数据库和模式 6 1.2.2 表、行和列 7 1.2.3 信息原则 10 1.2.4 域 12 1.2.5 元数据 13 1.2.6 键 13 1.2.7 未显式赋值的项(NULL) 18 1.3 实体之间的关系 20 1.3.1 二元关系 21 ...
  • SQLite源码时,遇到的问题

    千次阅读 2012-09-28 11:16:14
    开始看sqlite3.7的代码了,但是感觉到好像先天不足似的: ...现在想了想,还是翻译了,自己能看懂就行了,以后将重要的部分标注出来。 第二,就是对于C/C++掌握的还不是很清晰,当时数据结构学的不是很透彻,所以
  • 我现在在山大读计算机专业,已经大2了,但仍没有自己...即使思路算法都明白,但就是懂代码,更写不出来,而自己的自学能力又好差,一本C++教程我了快1学期了还没完,眼就要考试了,我也没心思专研了,就想
  • MM 也很漂亮哦) ,再找隔壁搞美术设计的 Mike 设 计了一个漂亮的盒子装起来……,我们都是 Decorator,最终都在修饰我这个人呀,怎么样, 看懂了吗? 装饰模式:装饰模式以对客户端透明的方式扩展对象的功能,是...
  • 其实,大多时候,我们大多都有一种感觉,能看懂别人的代码,可是自己写不出来,自己掌握的,是语言的基础,局限于语法层次,要想写出算法,需要数据结构的铺垫,后期也需要强大的数学推导能力。 数据结构不等于...
  • 了之后貌似了,自己完之后也正确了,但是不久之后就忘了,因为大脑在回忆的时候,只依稀记得代码中的部分,那么的模糊,根本不能再次出正确的代码,也许在第一次的时候是因为参考了别人的代码过之后...
  • 能看懂别人的代码,自己却编不出来。很多知识点明明已经理解了,可一到敲代码,就感觉一点思路都没有。 很喜欢编程,但是感觉自己学的好慢啊,编程没有思路,太打击自信心了,是不是没那天分???我觉得应该是代码...
  • 不得不说,好的代码是你一眼就能get这个思路,慢慢也能看懂,就是写不出来这么好的代码。 要学的还有很多啊 #include <stdio.h> #include <stdlib.h> typedef struct T { int v; struct T* Left, * ...
  • 堆排序及其分析

    2017-07-12 10:06:02
    从网上了许多的代码了之后貌似了,自己完之后也正确了,但是不久之后就忘了,因为大脑在回忆的时候,只依稀记得代码中的部分,那么的模糊,根本不能再次出正确的代码,也许在第一次的时候是因为参考了...
  • 排序算法之堆排序

    2014-03-29 16:27:08
    从网上了许多的代码了之后貌似了,自己完之后也正确了,但是不久之后就忘了,因为大脑在回忆的时候,只依稀记得代码中的部分,那么的模糊,根本不能再次出正确的代码,也许在第一次的时候是因为参考了...

空空如也

空空如也

1 2 3 4 5
收藏数 89
精华内容 35
关键字:

数据结构能看懂代码写不出来

数据结构 订阅