什么是链表?(图解)

一:链表是什么

1、链表是物理存储单元上非连续的、非顺序的存储结构,数据元素的逻辑顺序是通过链表的指针地址实现,有一系列结点(地址)组成,结点可动态的生成。

2、结点包括两个部分:(1)存储数据元素的数据域(内存空间),(2)存储指向下一个结点地址的指针域。

3、相对于线性表顺序结构,操作复杂。

4.链表分为 (1)单链表 (2)双链表 (3)单向循环链表 (4)双向循环链表

 

二:链表的作用

1、实现数据元素的存储按一定顺序储存,允许在任意位置插入和删除结点。

2、包括单向结点,双向结点,循环接点

 

三:链表与数组的区别

说到链表那肯定要聊一下数组,为什么会出现链表呢?

(1)数组:使用一块连续的内存空间地址去存放数据,但

例如:
int  a[5]={1,2,3,4,5}。突然我想继续加两个数据进去,但是已经定义好的数组不能往后加,只能通过定义新的数组

int b[7]={1,2,3,4,5,6,7};      ***********这样就相当不方便比较浪费内存资源,对数据的增删不好操作。

(2)链表:使用多个不连续的内存空间去存储数据, 可以 节省内存资源(只有需要存储数据时,才去划分新的空间),对数据的增删比较方便。

四:如何理解链表

理论的东西我就不说太多了,下面我将以代码+图形的方式让大家很通俗易懂的理解链表。

(1)单链表的结构体

struct node 
{
	int data;//存放数据
	struct node  *next; //地址域 (与节点的类型地址相匹配)
	
};

可以把这个结构体理解成这个样子

 

(2)创建链表的新节点

struct node *creat_node(int data)
{
	struct node  *new = malloc(sizeof(struct node));
	new->data = data; 
	new->next = NULL;
	
	return  new;
		
}

 

(3)插入节点

struct  node* insert_node(struct  node*p,struct  node*new)
{	
	 p->next = new;		
}t

(3)显示链表

void show(struct node  *p)
{	
	while(1)
	{		
		if(p== NULL)  //假设p已经为NULL则返回 
		{
			return ;
		}				
		printf("p=%d\n",p->data);		
		p  = p->next;  //链表的重要知识点!!! 遍历节点向下走 		
	}	
}

有了以上三个步骤我们就可以做出一条简单的单链表。

五:单链表完整代码

list.c

#include  <stdio.h>
#include  <stdlib.h>
//设计链表的节点 
struct node 
{
	int data;//存放数据
	struct node  *next; //存放地址  (与节点的类型地址相匹配)
	
};


//创建节点 
struct node *creat_node(int data)
{
	struct node  *new = malloc(sizeof(struct node));
	new->data = data; 
	new->next = NULL;
	return  new;		
}


//插入节点 (链接节点)
struct  node* insert_node(struct  node*p,struct  node*new)
{	
	 p->next = new;		
}


//显示节点数据  (遍历节点)
void show(struct node  *p)
{	
	while(1)
	{		
		if(p== NULL)  //假设p已经为NULL则返回 
		{
			return ;
		}				
		printf("p=%d\n",p->data);		
		p  = p->next;  //链表的重要知识点!!! 遍历节点向下走 		
	}	
}


int main()
{



	 
    //1.分配节点空间
	struct node  *a0 = creat_node(100); 
	struct node  *a1 = creat_node(200); 
	struct node  *a2 = creat_node(300);
	

	inser_node(a0,a1);
	inser_node(a1,a2);
	
	
	//通过a0  访问a0  a1  a2的数据    //3.访问节点中的数据 
	//printf("a0=%d,a1=%d,a2=%d\n",a0.data,a0.next->data,a0.next->next->data);
	
	
	show(a0);

}

 

<think>嗯,用户遇到了Debian Jessie仓库无法更新的问题,提示“apt-secure repository does not have a Release file”。我需要先分析可能的原因。首先,Debian Jessie已经进入LTS阶段,可能官方仓库已经迁移到存档服务器了。原来的security仓库可能不再维护,导致Release文件缺失。 接下来,我应该检查用户是否还在使用旧的源列表。正确的做法是建议用户将源切换到archive.debian.org或者deb.debian.org的存档地址。此外,用户可能需要更新GPG密钥,因为旧的密钥可能已过期或被替换。 另外,用户可能没有正确配置源地址的组件,比如main、contrib、non-free部分是否齐全。需要提醒用户检查这些配置。还有,HTTPS支持可能需要安装apt-transport-https包,虽然Jessie默认应该支持,但确认一下也好。 然后,处理步骤应该包括修改sources.list文件,替换旧的URL,添加正确的deb行,可能还要导入新的密钥。最后执行apt-get update看看是否解决问题。如果还有其他问题,可能需要更详细的日志或者检查网络连接。 用户可能不太清楚如何编辑源列表,所以需要给出具体的命令示例,比如使用sed替换源地址,或者手动编辑文件。同时,提醒备份sources.list是个好习惯,防止出错。 最后,生成的相关问题应该覆盖常见后续疑问,比如如何完全升级系统、处理GPG错误、切换其他镜像源等。这样用户如果有其他问题,可以自行参考。</think>### Debian Jessie仓库Release文件缺失解决方案 Debian 8 "Jessie"已于2018年进入LTS(长期支持)阶段,其官方仓库已迁移至存档服务器。当出现"repository does not have a Release file"错误时,可按以下步骤修复: 1. **修改源列表** ```bash sudo sed -i 's/httpredir.debian.org/archive.debian.org/g' /etc/apt/sources.list sudo sed -i 's/security.debian.org/archive.debian.org\/debian-security/g' /etc/apt/sources.list ``` 2. **推荐的安全源配置** ```bash deb http://archive.debian.org/debian/ jessie main contrib non-free deb http://archive.debian.org/debian-security/ jessie/updates main ``` 3. **添加LTS支持源** ```bash deb http://deb.debian.org/debian jessie-backports main ``` 4. **更新软件包列表** ```bash sudo apt-get update -o Acquire::Check-Valid-Until=false ``` **注意**:需强制忽略过期时间戳检查[^1]。如果出现GPG错误,需导入新密钥: ```bash sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 8B48AD6246925553 ```
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值