指针储存一个变量的在内存中的地址。
int *i; /* 一个整型的指针 */ double *d; /* 一个 double 型的指针 */ float *f; /* 一个浮点型的指针 */ char *c; /* 一个字符型的指针 */
指针也可以指向结构体。指向结构体中的某个参数使用“->”符号,NULL表示指针为空。
typedef struct { int val; list *next; } list; //定义两个元素的结构体,一个是int型数据,一个是结构体指针,指向某个位置 list *p,*q,*head; //定义结构体指针 p=(list*)malloc(sizeof(list));//为某个结点分配内存 p->val=1;//为p中的val赋值 p->next=NULL;//将p中的next指针赋为空 head=p;//head指针指向p q=(list*)malloc(sizeof(list)); q->val=2; q->next=NULL; p->next=q;//令p中的next指针指向q
上面就创建了两个元素的链表(省略主函数)。创建多个元素的链表,可以用循环来创建。数据结构如图(注意,head和next指针都指向的是下一个结点整体,而不是某个元素):
插入:以上表为例,假设插入到pq之间,首先为为结构体指针L分配内存,然后,令L->next=p->next(即 令L的next指针指向p的next指针的位置),最后p->next=L(将p的next指针改为L)。
删除:我们假设删除q,首先用指针L指向q,然后令q的上一个结点p的next指针指向q的next指针,最后释放L的内存。
遍历:使用while循环,先让一个指针指向head(这里设置为a,如果没有影响用head本身也可以),每次进行操作后都执行a=a->next(让它指向下一个结点)。直到a指向NULL(即到达表尾)结束。(下图为遍历过程)