简单的指针链表
指针链表用到了指针和结构体。
一.结构体使用
其中结构体的定义方式有多种,但是一不小心就会搞错。下面总结如下:
1.最可能出错的地方是先定义结构体,再对其整体进行初始化。如果在定义结构体变量的时候没有初始化,那么后面就不能全部一起初始化了;这样编译会出错。正确的办法是定义变量后马上初始化。如果实在要先定义,再初始化,也只能对结构体内的变量逐个初始化。举例如下:
struct VAL={int a;int b; int c;};
struct VAL val1,val2,val3;
val1={1,2,3};
val2={4,5,6};
val3={7,8,9};
这样是错误的,正确的做法如下:
a)struct VAL={int a;int b; int c;};
struct VAL val1={1,2,3},val2={4,5,6},{7,8,9};
b)struct VAL={int a;int b; int c;}val1={1,2,3},val2={4,5,6},{7,8,9};
c)struct VAL={int a;int b; int c;};
struct VAL val1,val2,val3;
val1.a=1;val1.b=2;val1.c=3;
d)typedef struct VAL={int a;int b; int c;}val;
val val1={1,2,3},val2={4,5,6},{7,8,9};
2.结构体在定义的时候是不会分配内存空间的,只有在定义变量后才会真正分配空间
3.结构体整体空间是占用空间最大的成员(的类型)所占字节数的整数倍。这是对齐的问题。
二 指针链表的实现
#include "stdio.h"
struct student
{
char name[100];
int score;
struct student *next;//指向自身的类型
};
int main()
{
struct student a={"zhangsan",85},b={"lisi",86},c={"wangwu",87},*p,*head;
head=&a;
a.next=&b;
b.next=&c;
c.next=NULL;
p=head;
do
{
printf("name:%s score=%d\r\n",p->name,p->score);
p=p->next://非常巧妙
}while(p!=NULL);
return 0;
}
运行结果