美文网首页C&C++
C顺序表之1

C顺序表之1

作者: 顶级工程师闯天涯 | 来源:发表于2017-11-02 01:22 被阅读1次

    为考研读懂C定义的代码而重新学习C语言

    1.结构体的定义

    首先来回顾一下C语言种的结构体:
    使用关键字struct来定义。

    //定义顺序表数据类型
    struct SeqList{
        int MAXNUM;//顺序表可以存放元素的最大个数
        int n;//顺序表实际存储的元素个数
        DataType * element; //存储线性表的元素,这里采用指针来表示,其实也可以表示为数组(DataType在这里表示泛指元素的数据类型)
    };//此处的“;”一定不能忘记!!!
    

    2.结构体的访问

    首先来讨论如何定义结构体变量:其实结构体就是我们程序员自定义的一种数据类型,其和内置的数据类型(int ,char,float,double等)在声明变量部分并无二至。即和正常的声明变量一样,大胆声明即可。在C语言种有个有趣的关键字typedef给类型起别名

    //接上面定义的结构体SeqList
     struct SeqList  seqList;// 声明结构体变量
     struct SeqList *PSeqList;//声明结构体指针变量
    
    所以也就结构体就有了如下3种访问结构体成员的方式:
    1. seqList.成员名; //结构体变量.成员名
    2. *PSeqList.成员名; //(*指针变量名).成员名
    3. PSeqList = &seqList;
        PSeqList ->成员名 //指针变量名 -> 成员名
    

    3.进入数据结构的顺序表部分

    //创建空顺序表
    1.将顺序表的指向结构体SeqList 的指针起个别名
    typedef struct SeqList *PSeqList;
    2.创建新的顺序表
    PSeqList createNullList_seq(int m){
        //1.创建新的顺序表,分配内存
        PSeqList palist = (PSeqList)malloc(sizeof(struct SeqList));
        //2.判断palist是否开辟内存成功
        if(palist != NULL){
            //3.为顺序表中定义的数组element开辟内存
            palist -> element = (DataType* ) malloc(sizeof(DataType)*m);
            //注意这里的if判断条件if,下面会专门讲解
            if(palist-> element){
                //4.分配内存成功,为结构体中的MAXNUM和n赋初值
                    palist -> MAXNUM = m;
                    palist -> n = 0;//空表长度为0
                    return palist;//一切正常返回 正常的结果
            }else {
                //如果palist-element为NULL,则释放palist的内存空间
                free(palist);
        }
        //5.处理分配内存失败的情况
        printf("Out of space!\n");//分配内存失败
        return NULL;
    }
    /**
    * 上述代码综合来看写得逻辑清晰,易于理解,
    *但在处理判空问题上,两次if其实的逻辑是一样的,但
    *作者在这里采用的两种写法,会让初学者(C还给老师的“Freshman”迷茫)。瑕不掩瑜,作者对于失败情况的处理*还是非常到位的,而没有使用无谓的else.
    */
    

    4.简要谈一下C语言中让你迷茫的if判断

    C语言中是没有boolean类型的,而是使用0代表逻辑假,非0代表逻辑真。所以我们经常看到的if(n) 等价于 if (n!=0) 或者是 if(n != NULL)两种情况;

    1. if (n) 等价于 if (n != 0);
    2. if(n != NULL) 等价于 if(n != NULL)

    相关文章

      网友评论

        本文标题:C顺序表之1

        本文链接:https://www.haomeiwen.com/subject/yfgnpxtx.html