数据结构总结篇-1

目录

 

1.线性表

2.栈和队列


1.线性表

 List<Integer> list=new ArrayList<>();
 List<Integer> list1=new LinkedList<>();

顺序表和链表的比较:

ArrayList 是一个可改变大小的数组.当更多的元素加入到ArrayList中时,其大小将会动态地增长.内部的元素可以直接通过get与set方法进行访问,因为ArrayList本质上就是一个数组.

LinkedList 是一个双链表,在添加和删除元素时具有比ArrayList更好的性能.但在get与set方面弱于ArrayList.

列举一题:合并数组

给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。

初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 的空间大小等于 m + n,这样它就有足够的空间保存来自 nums2 的元素。

方法一:直接合并后排序(Arrays.sort采用的是快速排序)

class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        for(int i=m,j=0;i<m+n;i++){
            nums1[i]=nums2[j];
            j++;
        }
        Arrays.sort(nums1);
    }
}

方法二:双指针

class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        int p1 = 0, p2 = 0;
        int[] sorted = new int[m + n];
        int cur;
        while (p1 < m || p2 < n) {
            if (p1 == m) {
                cur = nums2[p2++];
            } else if (p2 == n) {
                cur = nums1[p1++];
            } else if (nums1[p1] < nums2[p2]) {
                cur = nums1[p1++];
            } else {
                cur = nums2[p2++];
            }
            sorted[p1 + p2 - 1] = cur;
        }
        for (int i = 0; i != m + n; ++i) {
            nums1[i] = sorted[i];
        }
    }
}

2.栈和队列

Java中实际上提供了java.util.Stack来实现栈结构,但官方目前已不推荐使用,而是使用java.util.Deque双端队列来实现队列与栈的各种需求.如下图所示java.util.Deque的实现子类有java.util.LinkedList和java.util.ArrayDeque.顾名思义前者是基于链表,后者基于数据实现的双端队列.

Deque关于栈的用法

//public interface Deque<E> extends Queue<E>
Deque<Integer> stack=new LinkedList<>();//栈
stack.push(2);//压栈
stack.pop();//出栈并删除元素
stack.isEmpty();//判断是否为空
stack.peek(); //获取栈顶

Deque关于Queue队列的用法

Deque<Integer> queue=new LinkedList<>();
queue.offer(2);//向队尾插入元素,失败返回false
queue.poll();//删除队头元素,失败返回full
queue.peek();//获取队头元素,不删除

双头队列Deque的用法和Stack与Queue的比较

栈的经典题目:

给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

    左括号必须用相同类型的右括号闭合。
    左括号必须以正确的顺序闭合。

class Solution {
    public boolean isValid(String s) {
        int n=s.length();
        if(n%2==1)
            return false;
        Map<Character,Character> map=new HashMap<Character, Character>(){{
            put(')','(');
            put('}','{');
            put(']','[');
        }};
        Deque<Character> stack=new LinkedList<>();
        for (int i = 0; i <n; i++) {
           char c=s.charAt(i);
           if(map.containsKey(c)){
               if(stack.isEmpty()||stack.peek()!=map.get(c)){
                   return false;
               }  
               stack.pop();
           }
           else {
               stack.push(c);
           }
        }
        return  stack.isEmpty();
    }
}

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Python中,数据结构的实现是非常重要的。尽管Python本身是用C实现的,速度和效率相对较低,因此与其他编程语言相比,Python对数据结构和算法的重视程度可能较低。Python最引以为傲的是其功能强大和丰富的库和模块。对于许多像您一样的新手来说,时间复杂度似乎并不是一个硬性要求,只要能实现功能就可以了。 Python中可以使用各种数据结构,比如栈和队列。栈和队列是常见的数据结构,它们分别具有后进先出和先进先出的特点。在Python中,我们可以使用列表来模拟栈和队列的行为。列表提供了丰富的方法来添加、删除和访问元素,可以轻松实现栈和队列的功能。 除了使用列表,Python还提供了一些内置的数据结构,如堆、集合和字典,可以根据具体需求选择合适的数据结构来实现功能。 总结来说,Python实现数据结构的方法有很多种,可以使用列表、内置数据结构或自定义数据结构来满足不同的需求。在实际编程中,可以根据任务的复杂程度和性能要求选择合适的数据结构来提高代码的效率和可读性。 <span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [python 数据结构](https://blog.csdn.net/qq_62047219/article/details/125618390)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [Python 实现数据结构中的的栈队列](https://download.csdn.net/download/weixin_38616139/12863051)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值