严版数据结构 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;
...