传统的数组都是连续地址,顺序结构,不便于增删。
数组和链表的对比:
#include <stdio.h>
struct Test
{
int data;
struct Test *next;
};
void printLink(struct Test *head){
while(head != NULL){
printf("%d ",head->data);
head = head->next;
}
putchar('\n');
}
int Link_Lenth(struct Test *head){
int len = 0;
while(head != NULL){
len++;
head = head->next;
}
return len;
}
int main()
{
int i;
int array[] = {1,2,3,4,5,6,7,8,9,10};
for(i = 0;i < sizeof(array)/sizeof(array[0]);i++){
printf("%d ",array[i]);
}
putchar('\n');
struct Test t1 = {1,NULL};
struct Test t2 = {2,NULL};
struct Test t3 = {3,NULL};
t1.next = &t2;
t2.next = &t3;
printf("%d %d %d \n",t1.data,t1.next->data,t1.next->next->data);
printLink(&t1);
printf("The lenth of the link is %d\n",Link_Lenth(&t1));
return 0;
}
运行结果:
1 2 3 4 5 6 7 8 9 10
1 2 3
1 2 3
The lenth of the link is 3
其它如查询,插入,修改,删除等挺简单的,思路清晰,就不打了,无非是保证头节点的情况下改一下指针指向。。。
例如删除元素2,直接将1的指针指向3,然后free(2),回收节点2即可
然后就是动态创建链表,头插法尾插法等等
链表相关应用练习放在后续项目练习:贪吃蛇 中展示。