结构体、单链表
作者:互联网
结构体
结构体和数组一样,都是聚合类型,在进行整体初始化的时候只有一次机会,就是在定义的时候(但是可以局部初始化)
typedef与结构体
不加typedef时定义结构体:
struct Student
{
char name[10];
int age;
}student1; //student1是结构体的一个结构体变量,且student未定义,而结构体的名字叫做Student
struct Student stu1={“hello”,18};//用结构体的话需要这样用,加struct Student
加上typedef:
typedef是为一种类型取别名,而结构体类型也是一种类型,加上typedef之后就是为结构体取了一个别名,方便在后面引用
typrdef struct Student
{
char name[10];
int age;
}student; //加了typedef只后,student叫做结构体类型,相当于为Student这个结构体取了一个别名叫做student
student stu1={“hello”,18};//加上typedef只后,只需要用stu就行了
结构体成员
结构体成员可以是变量,数组,指针,还可以是其他结构体
但是注意:结构体成员可以是其他结构体,但是如果结构体成员是自己本身的话,也就是结构体的自引用,只能以指针的形式,因为指针大小固定(32位是4字节,64位是8字节)
struct SELF_REF{
int a;
struct SELF_REF b; //此处引用不合法,SELF_REF结构体中包含一个自己结构体的成员,但该结构体成员的大小是多少并不确定
int c;
};
struct SELF_REF{
int a;
struct SELF_REF* b; //此处引用是合法的,该处b是一个指针,指针大小固定,所以结构体的大小也就固定了
int c;
};
结构体成员的访问
看用.还是-> 看.或者->前面是什么,前面是变量就用. 前面是指针就用->
struct A
{
int a;
int b;
};
struct B
{
int c;
struct A *pa;
struct A AA;
}bb;
int main()
{
struct bb;
bb.c; //访问结构体B中的c成员
bb.pa->a;
bb.pa->b;//通过结构体B来访问结构体A中的a和b成员 (指针形式)
bb.AA.a;
bb.AA.b;//通过结构体B来访问结构体A中的a和b成员
}
单链表
带头节点
typedef struct Node
{
int data;
struct Node* next;
}Node,*Plist;
初始化:
void InitList(Plist plist)
{
if(plist==NULL)
{
return ;
}
plist->next=NULL;
}
头插法:
Node* GetNode(int val)//得到一个节点
{
Node* pGet=(Node* )malloc(sizeof(Node));
pGet->data=val;
pGet->next=NULL;
return pGet;
}
void InsertHead(Plist plist,int val) // 头插法
{
Node* pGet=GetNode(val);
pGet->next=plist->next;
plist->next=pGet;
}
尾插法:
void InsertTail(Plist plist,int val)
{
Node *pGet = GetNode(val);
Node *pCur=plist->next;
while((pCur->next) != NULL)
{
pCur = pCur->next;
}
pCur->next = pGet;
}
打印:
void Show(Plist plist)
{
Node * pCur=plist->next;
while(pCur!=NULL)
{
printf("%d ",pCur->data);
pCur=pCur->next;
}
printf("\n");
}
得到链表的长度:
int GetLength(Plist plist)
{
int count;
Node * pCur = plist->next;
while ((pCur) != NULL)
{
pCur = pCur->next;
count++;
}
return count;
}
标签:Node,单链,struct,int,next,pCur,结构 来源: https://blog.csdn.net/Bityang_01/article/details/100897900