结构体的数据类型是为了将不同数据类型,但相互关联的一组数据,组合成一个有机整体使用,就相当于是java中的一个对象中定义了一些不同的属性
结构体类型定义:
struct 结构体类型名{
数据类型 数据项1;
数据类型 数据项2;
.....
};
例如:
struct Data{
int year;
int month;
int day;
};
结构体变量定义:
间接定义法:先定义结构体类型,再定义结构体变量
struct Data data;
直接定义法:在定义结构体类型的同时,定义结构体变量
struct Data{
int year;
int month;
int day;
}data;
结构体变量的引用:
结构体变量.成员,其中通过成员运算符‘.’逐个访问其成员。
结构体变量的初始化:
结构体变量={初始表};
结构体数组:
结构体数组的每一个元素,都是结构体类型数据,均包含结构体类型的所有成员。
struct std_student students[3]={
{.....};
{};
{};
};
指向结构体变量的指针:
结构体变量在内存中的起始地址称为结构体变量的指针。
struct Data data={2019,3,4};
struct Data *p=&data;
printf("%d",p->year);
一般指针变量printer指向结构体变量var:
var.成员
pointer->成员
(*pointer).成员
线性表的链式存储结构:
线性链表是线性表的链式存储结构,是一种物理存储单元上的非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现,因此,哎存储线性表中的数据元素的时候,一方面要存储数据元素的值,另一方面要存储各数据元素之间的逻辑关系,因此,将每一个节点分为两部分:数据域和指针域。
单链表的基本操作:创建,检索,插入,删除,修改。
struct 结构体名{
数据成员表;
struct 结构体名 *指针变量名;
};
struct student{
long num;
char name[20];
int score ;
struct student *next;
};
利用malloc函数向系统申请分配链表节点的存储空间,返回存储区的首地址。
p=(struct student*)malloc(sizeof(struct student));
需要使用free(p)来释放
线性表的基本操作:
结构体:
struct student{
int data;
struct student *next;
};
struct student stu2[5],stu1;
初始化单链表:
int Initiate(struct student *s){
if((s=(struct student*)malloc(sizeof(struct student)))==NULL){
return 0;
}
s->next=NULL;
}
单链表的插入(后插):
main(){
struct student *s=&stu1;
struct student *p=&stu2;
int i;
Initiate(s);
for(i=0;i<5;i++){
Initiate(p);
(p+i)->data=i;
(p+i)->next=s->next;
s->next=(p+i);
}
for(i=0;i<5;i++){
printf("%d",p[i].data);
}
}
结果:
单链表删除:
如果要删除线性表h中的第i个节点,首先要找到第i个节点并让指针p指向其前驱的第i-1个节点,然后删除第i个节点并释放被删除节点。
(p+1)->next=(p+1)->next->next;
free((p+2));