2019-05-16(链表相关 节点的定义(以链队列为例):} QNode ,*QueuePtr; QueuePtr front;)

严版数据结构 p61:

单链队列:

链表节点的定义:

typedef struct QNode{
QElemType         data;
struct   QNode   *next;
} QNode ,*QueuePtr;

定义队列:

typedef struct {
QueuePtr front;
QueuePtr rear; 
} LinkQueue;

参考 c primer plus p459

可以使用 指针 来代替 数组:

struct names {
char first[LEN];
char last[LEN];
};
struct pnames{
char * first;
char* last;
}

理解方式1

typedef struct {
QueuePtr front; "根据下面的关于指针的解释 :这里实际实指针(数组)"
QueuePtr rear; "实际上是:rear [ ]";
} LinkQueue;

参考 c primer plus p463 p465

理解方式2(更准确)

typedef struct {
QueuePtr front; "front 成员是一个嵌套结构 通过front 访问 QueuePtr结构体结点信息"
QueuePtr rear; 

} LinkQueue;


初始化的时候:*)
Struct LinkQueue Queue;
struct QueuePtr   p = malloc...;
Queue.rear->next = p;
Queue.rear = p
通过

下面代码的解释 应该是正确理解:

参考:看出就是嵌套结构:

https://www.cnblogs.com/renyuan/archive/2012/11/30/2796792.html

typedef struct QNode{
QElemType         data;
struct   QNode   *next;
} QNode ,*QueuePtr;

"*QueuePtr:声明一个指针类型的变量 ,变量的类型是QNode结构体定义的类型"


typedef struct {
QueuePtr front; "front 成员是一个嵌套结构 通过front 访问 QueuePtr结构体结点信息"
QNode * front; 

"以上两种格式的表达的意思是一样的,在结构体定义+声明的时候不是指针的形式 ,那么在 嵌套结构关系 结构体定义中就需要  声明结构体为指针类型;"

} LinkQueue;



辅助性例子:https://www.jianshu.com/p/71b697b804f8

下面是联合使用的用法 :
fit.digit = 23; //把23储存在fit 占字节2字节
fit.bigfl = 2.0;//清除23 把 2.0存在 fit 占 8字节
在联合中,一次储存一个值,不能 同时存一个int 一个 double 等类型字符 利用->访问数据也是一样;

用一个成员把值储存在一个联合中,然后与用另外一个成员进行查看内容,这种做法有时很有用,下面是例子:

联合的另外一种用法就是 (两个结构体 一个描述抽象物体,一个描述与物体的从属关系):

结构中储存 其成员的从属关系的信息,假设用一个结构表示一辆汽车,如果汽车属于驾驶者,用一个结构描述所有者,如果是租赁的,那么这个结构就是描述租赁公司;

struct owner {
    char socsecurity[12];
    ...
};

struct leasecompany{
    char name[40];
    char headpuarters[40];
...
};

union data {
    struct owner owncar;
    struct leasecompany leasecar;
};

struct car_data {
    char make[15];
    int status;    /*0=私有,1=租赁*/
    union data ownerinfo; 
    ...
};


假定flits是一个car_data结构。那么如果flits.status是0,程序就可以使用fits.ownerinfo.owncar.socsecurity; 如果flits.status是1,程序就可以使用flits.ownerinfo.leasecar.name。

例子2:Sqlist 说明学生信息储存在 list 中 的从属关系??(不是从属关系 定义结构不一样 Student 前面没有struct)

第二个结构体是定义一个链表:链表的成员变量数据类型 是第一个结构体表达的类型的数组:

typedef struct
{
    char name[20];
    int num;
    float math;
    float english;
    float computer;
}Student;

typedef struct
{
    Student data[MAXSIZE];
    int len;
}Seqlist;

Seqlist* Init_Seqlist()
{
    Seqlist*L;
    L=(Seqlist*)malloc(sizeof(Seqlist));
    L->len=0;
    return L;

}

其实结构体是一种数据类型:那么基本数据类型看做一个结构体,同样

struct stu_scores{

    int count;
    double average;
    double scores[];

} ;
struct flex *pf1,*pf2;

...

有人已经做过笔记:https://my.oschina.net/idreamo/blog/866620

你可能感兴趣的:(2019-05-16(链表相关 节点的定义(以链队列为例):} QNode ,*QueuePtr; QueuePtr front;))