链表的使用
前言
用c语言实现链表各种的操作,以及需要注意的事项
【链表理论知识】科普链接: https://blog.youkuaiyun.com/weixin_43382136/article/details/130531377
一、链表和数组的区别及实现
数组和链表的区别在于:
数组取的内存空间是连续的,
而链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。
优点是数据的插入或删除都相当方便,有新数据加入就向系统要一块内存空间,数据删除后,就把空间还给系统,不需要移动大量数据。
缺点是设计数据结构时较为麻烦,另外在查找数据时,也无法像静态数据一样可随机读取数据,必须按顺序找到该数据为止。
//数组
#include<stdio.h>
int main()
{
int i;
int array[] = {
1,3,5,7};
for(i=0;i<sizeof(array)/sizeof(array[0]);i++)
{
printf("%d ",array[i]);
}
putchar('\n');
}
//静态链表
#include<stdio.h>
struct Test
{
int data;
struct Test *next;
};
int main()
{
struct Test t1={
1,NULL};
struct Test t2={
3,NULL};
struct Test t3={
5,NULL};
struct Test t4={
7,NULL};
t1.next = &t2;
t2.next = &t3;
t3.next = &t4;
printf("%d %d %d", t1.data, t1.next->data, t1.next->next->data, t1.next->next->next->data);
return 0;
}
二、链表操作
1.链表遍历
#include<stdio.h>
struct Test
{
int data;
struct Test *next;
};
//动态遍历
void printLink(struct Test *head)
{
struct Test *point;
point = head;
while(point != NULL){
printf("%d",point->data); //输出当前指针指向的数据
point = point->next; //指针向后移
}
putchar('\n');
}
int main()
{
//静态创建链表
struct Test t1={
1,NULL};
struct Test t2={
3,NULL};
struct Test t3={