数组和链表-《算法图解》学习

内存工作原理

需要将数据存储到内存时,你请求计算机提供存储空间,计算机给你一个存储地址。需要存
储多项数据时,有两种基本方式——数组和链表。但它们并非都适用于所有的情形,因此知道它
们的差别很重要。接下来介绍数组和链表以及它们的优缺点。
 
==============to be conntinued================

1、什么是链表Java LinkedList

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

个人理解:链表是离散的表,n个节点组成,每个节点有2部分:1个是本节点存储的数据,1个是下一个节点的地址(指向下一个节点的指针)。操作系统上为了提高内存管理的效率,存储数据时有离散算法,那么链表应该也是为了提高数据的存储效率的一种数据类型。

 

与 ArrayList 相比,LinkedList 的增加和删除的操作效率更高,而查找和修改的操作效率较低。

以下情况使用 ArrayList :

  • 频繁访问列表中的某一个元素。
  • 只需要在列表末尾进行添加和删除元素操作。

以下情况使用 LinkedList :

  • 你需要通过循环迭代来访问列表中的某些元素。
  • 需要频繁的在列表开头、中间、末尾等位置进行添加和删除元素操作。// 引入 LinkedList 类
import java.util.LinkedList;

public class RunoobTest {
    public static void main(String[] args) {
        LinkedList<String> sites = new LinkedList<String>();
        sites.add("Google");
        sites.add("Runoob");
        sites.add("Taobao");
        sites.add("Weibo");
// 使用 addLast() 在尾部添加元素
        sites.addLast("Wiki");
// 使用 removeFirst() 移除头部元素
        sites.removeFirst();
// 使用 removeLast() 移除尾部元素
        sites.removeLast();
// 使用 getFirst() 获取头部元素
        System.out.println(sites.getFirst());
// 使用 getLast() 获取尾部元素
        System.out.println(sites.getLast());
//可以使用 for 配合 size() 方法来迭代列表中的元素:
for (int size = sites.size(), i = 0; i < size; i++) {
            System.out.println(sites.get(i)); System.out.println(sites); } }

  

2、链表C语言

2.1创建链表节点create_node

2.2插入节点

 2.3遍历链表

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

3、链表算法题

posted @ 2024-06-23 22:37  迷迷糊糊的礼物  阅读(3)  评论(0编辑  收藏  举报