美文网首页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