学习目标:

理解数组、链表、栈、队列的实现原理,熟练线性存储结构的使用


学习内容:

1、 基本理解 2、 深入理解具体实现 3、 实际用例

一、基本理解和使用

一般来说,常用的数据结构分为线性数据结构和非线性数据结构,线性数据结构又分为数组、链表、栈和队列,所谓线性结构是指结构中的元素存在一个一对一的关系,下面具体说明;

1、数组

数组是最基础的数据结构,是将相同类型的元素存储于连续的内存空间中;
数组由于其下标结构,查改效率很高,但非尾部增删效率差,而且也不适合存储特大量的数据。
如图
数组

//创建一个整形数组int[] nums;
//静态初始化int[] nums = {1,2,3,4,5}
//动态初始化int[] nums;num[0] = 1;num[1] = 2;num[2] = 3;num[3] = 4;num[4] = 5;

二维数组

二维数组是一种结构较为特殊的数组,只是将数组中的每个元素变成了一维数组。
类似一维数组,对于一个二维数组 A = [[1.1, 1.2, 1.3,1. 4],[2, 4, 5, 6],[1, 4, 6, 8]],计算机同样会在内存中申请一段 连续 的空间,并记录第一行数组的索引位置,即 A[0][0] 的内存地址,它的索引与内存地址的关系如下图所示。
在这里插入图片描述

可变长数组

上述数组在创建时需要设定长度,这个长度是无法改变的;基于数组,java中引入集合中的ArrayList实现可变长数组,即基于数组延申为一个集合类,
注意:集合和数组是有区别的,即ArrayList不是数组Array,可以使用Array =toArray(arraylistxxx)和ArrayList = asList(array)转化(因为泛型机制的存在,toArray()无参方法常出错,asList()方法也需要参数而不是直接调用)。

  // 创建集合对象ArrayList<String> list = new ArrayList<>();// 添加元素list.add("zhangsan");list.add("lisi");list.add("wangwu");// 从集合中取出某个元素// List集合有下标String firstElt = list.get(0);System.out.println(firstElt);System.out.println("================");// 遍历(下标方式)for(int i = 0; i < list.size(); i++){String elt = list.get(i);System.out.println(elt);}System.out.println("================");// 遍历(迭代器方式)Iterator<String> it = list.iterator();while(it.hasNext()){System.out.println(it.next());}System.out.println("================");// while循环修改为for循环/*for(Iterator<String> it2 = list.iterator(); it2.hasNext(); ){System.out.println("====>" + it2.next());}*/// 遍历(foreach方式)for(String s : list){System.out.println(s);}System.out.println("================");//lambda表达式list.forEach(System.out::println);

2、链表

链表不同于数组,在内存地址上是不连续的,这使得它的增删效率高,但查改效率不如数组。一个链表节点一般包括值val和(指针)下一个节点引用信息指向直接后继。

单链表

在这里插入图片描述

循环链表

循环链表是特殊形式的单链表,它的最后一个节点的指针与指向头节点,整个链表形成一个环。从任一节点出发均可找到其他节点
在这里插入图片描述

为了克服链表的单向性,又引入了双链表,即拥有两个指针域的链表,增加了一个指向直接前驱的指针域。

双向链表

在这里插入图片描述

//单链表的简单实现
class ListNode {int val;       // 节点值ListNode next; // 后继节点引用ListNode(int x) { val = x; }
}
// 实例化节点
ListNode n1 = new ListNode(4); // 节点 head
ListNode n2 = new ListNode(5);
ListNode n3 = new ListNode(1);// 构建引用指向
n1.next = n2;
n2.next = n3;//遍历方式ListNode head=n1;while(head!=null){System.out.println(head.val);head=head.next;}

双向链表的使用
java中的集合LinkedList基层为双向链表。
LinkedList和ArrayList都是线性结构同实现了一个List接口大多方法通用。

3、栈

基于以上两种结构,栈是一种具有【先进后出】的抽象特点数据结构,简单来说,它更像是一种只从一端进行存取操作的线性表,在栈顶加入元素操作称为压栈,在栈顶去除元素为弹栈,对于栈,基本的操作包括压栈(push)、弹栈(pop)、判空(isEmpty)、栈顶元素(getTop);
在这里插入图片描述
java中栈的使用可以直接使用Vector的子类Stack,也可以使用ArrayDeque,LinkedList等通过特定方法间接使用
出于性能调优一般不建议使用Stack,线程同步可使用Collections工具类中的synchronizedXxx()将线程不同步的ArrayDeque以及LinkedList转换成线程同步,ArrayDeque和LinkedList使用同数组和链表的选用;

Stack<String> stack = new Stack<>();//压栈stack.push("Stack");stack.push("one");stack.push("two");//输出栈顶元素:此时为twoSystem.out.println(stack.peek());//弹栈一次并再次输出栈顶元素和栈元素个数,后进先出,two被弹走了,栈顶为onestack.pop();System.out.println(stack.peek());System.out.println(stack.size());//清空栈stack.clear();//判断栈是否为空,上面清空,所以返回trueSystem.out.println(stack.isEmpty());System.out.println("====================");LinkedList<String> stack2 = new LinkedList<>();//压栈stack2.addFirst("stack");stack2.addFirst("one");stack2.addFirst("two");//输出栈顶元素System.out.println(stack2.getFirst());//弹栈后输出栈顶元素和栈中元素个数stack2.removeFirst();System.out.println(stack2.getFirst());System.out.println(stack2.size());//清空栈stack2.clear();//判断栈是否为空 trueSystem.out.println(stack.isEmpty());ArrayDeque<String> stack3 = new ArrayDeque<>();/*ArrayDeque可以作为栈也可以当作队列,作为栈时方法同上,不在赘述,如stack3.push("stack")或者stack3.addFirst("stack");stack3.pop()或者stack3.removeFirst()*/

4、队列

队列是一种【先入先出】的引用数据结构,和栈相对,是从线性表的一端插入元素,另一端删除元素,允许插入的一端叫队尾,另一端是队头。基本操作同栈类似,只是删除的位置不一样。
在这里插入图片描述
队列和栈一样,可以使用链表和数组实现,一般使用LinkedList充当队列

  Queue<String> queue=new LinkedList<>();//入队queue.offer("obj1");queue.offer("obj2");queue.offer("obj3");queue.offer("obj4");//输出队列长度System.out.println(queue.size());//出队:    先入先出元素1出队queue.poll();//输出队头元素:   1走了,元素2是队头System.out.println(queue.peek());//清除队列后判断队列是否为空queue.clear();System.out.println(queue.isEmpty());

二、实现方法与原理

这里主要深入理解一下几种结构的构造,特性及原因,增删查改的方法实现

数组

构造:
数组由一块连续的内存空间组成,这块空间又被均等的划分为每一个元素,当知道第一个地址时,根据数学计算即可快速找到第i个元素的位置,所以数组的优点一下就表现出来,但对于计算机而言,一般一块大的连续地址空间较少(操作系统中有详细说明),所以不适合存储特别大的数据。这也是为什么对于未知的初始数据量一般采用链表而非数组。

下标是数组中重要的一部分,通过下标可以快速访问数组中的数据,之所以从0开始,原因是对于计算机而言,减法是双位数运算,若从1开始,每一步要减一,会降低效率。

需要注意的是,对于java中数组来说,数组不是一个基本数据类型,而是一个引用数据类型,即内存地址在JVM的堆内存区。变量中存的是地址而不是值。
可变数组(基于ArrayList)
首先创建了一个长度为0的数组,当添加第一个元素的时候,初始化容量10。也可以用new ArrayList(int initialCapacity)指定容量 。定义一个size记录数组长度,一个capacity记录数组容量。
添加:
添加元素到数组的末尾只需要添加到size下标处,若要添加元素到指定的位置,则需要把数组的包括指定下标往后的数据依次退一格,然后将指定下标处的值赋予新元素值.
在这里插入图片描述

每次添加元素时进行一次判断,如果数组的长度等于其容量,进行一次扩容,每次扩容为原来的1.5倍。(创建一个新数组,然后将原数组的元素拷贝到新数组)。 不难发现每一次扩容都需要新建数组,频繁的new对象和回收不用的旧数组,由于JVM垃圾回收机制,会浪费很多性能,因而尽可能少扩容,即初始化一个合适的容量。

删除
在删除数组中的元素时需要将指定下标的后的元素依次向前移动一个位置,
然后数组size–;
在这里插入图片描述
由上面的可以看出,数组的非尾部增加删除元素,时间耗费主要在移动数组元素上,移动的个数取决于插入位置。若表长为n,上述两种算法的时间复杂度达到了O(n),故常说数组的增删效率较低。

查找和修改
数组查找元素,直接根据下标,即可快速找到元素位置并进行修改,这取决与数组的构造。
在这里插入图片描述

public class MyArrayList {//声明一个Object类型的数组private Object[] elements;//数组长度private int size;//无参构造函数,初始化数组容量为10public MyArrayList() {elements = new Object[10];}//有参构造方法,实现数组容量的初始化,用于指定容量public MyArrayList(int initialCapacity) {elements = new Object[initialCapacity];}//增加元素public void add(Object obj) {
//首先,判断数组是否装满,是则扩容if (size == elements.length-1) {elements=growArray(elements);}elements[size++] = obj;}public void add(int index, Object obj) {if (size == elements.length) {elements=growArray(elements);}for (int i = index; i < size+1 ; i++) {elements[i+1]=elements[i];}elements[index] = obj;size++;}public Object[] growArray(Object[] elements){
//创建一个新数组,新容量为旧容量2倍Object[] newArray = new Object[2 * size+1];
//将老数组拷贝到新数组内System.arraycopy(elements, 0, newArray, 0, elements.length);return newArray;}//删除指定下标对象,删除某位置,相当于 将后往前挪:public void remove(int index) {for (int i = index; i < size ; i++) {elements[i]=elements[i+1];}size--;/*  另一种实现int numMoved = size - index - 1;if (numMoved > 0) {System.arraycopy(elements, index + 1, elements, index, numMoved);}*/}
//根据数据删除public void remove(Object obj) {for (int i = 0; i < size; i++) {if (get(i).equals(obj)) {  remove(i);}}}//获取指定下标元素public Object get(int index) {return elements[index];}//修改指定下标元素public void set(int index,Object obj){elements[index] = obj;}//查看数组长度public int size() {return size;}
}

链表

构造
链表由一个个节点组成,节点由数值域和指针域组成,每个节点占用不同的地址(可以不连续),仅靠一个指针域与其它节点产生联系,这种构造使链表在删除时和增加时有很大优势。但由于节点地址是随机的,因此查找不能想数组一样通过数学表达式计算,只能遍历节点查找指定的index;导致其查询修改效率不高;

双向链表具体构建
一种简单思路是可以设置虚拟的头节点head和尾节点rear,然后根据指针域的操作,可以在头尾节点间插入不同的节点以记录数据;
添加和删除
链表的添加元素仅仅需要把插入元素前的next指针指向自己,然后将自己的指针next指向下一个元素;
删除元素把前一个元素的next指针指向下一个元素即可;因为不涉及到其他元素的移动,只有自己前后元素有影响,所以效率高于数组。双向链表则需要更改两个指针域pre和next;
在这里插入图片描述
查找和修改
链表的查找比较麻烦,想要知道第i个元素,必须从头指针开始一直向后寻找到第i个next,找到之后才能修改,双向链表可以反向查找,比单链表会好一点,但依旧不如数组;
在这里插入图片描述
LinkedList的实现

public class MyLinkedList {
//头节点LinkedListnode head;//尾节点LinkedListnode rear;int size;public int size() {return size;}//这里为了方便实现直接构建了两个虚拟的节点,不计入size中public MyLinkedList() {head = new LinkedListnode(0);rear = new LinkedListnode(0);size = 0;}//获取指定节点值public Object get(int index) {if (index < 0 || index > size - 1) {return -1;}//这里需要遍历节点以得到所求索引值return getNode(index).val;}
//获取链表的节点private LinkedListnode getNode(int index) {LinkedListnode temp = head.next;for (int i = 0; i < index; i++) {temp = temp.next;}return temp;}//在链表的第一个元素之前添加一个值为 val 的节点。插入后,新节点将成为链表的第一个节点。public void addAtHead(Object val) {//第一次添加if (head.next == null) {LinkedListnode newHead = new LinkedListnode(val);head.next = newHead;rear.pre = newHead;} else {LinkedListnode oldHead = head.next;LinkedListnode newHead = new LinkedListnode(val);newHead.pre = head;newHead.next = oldHead;head.next = newHead;oldHead.pre = newHead;}size++;}//将值为 val 的节点追加到链表的最后一个元素。public void addAtTail(int val) {//第一次添加if (rear.pre == null) {LinkedListnode newHead = new LinkedListnode(val);newHead.pre = head;newHead.next = rear;head.next = newHead;rear.pre = newHead;} else {LinkedListnode oldTail = rear.pre;LinkedListnode newTail = new LinkedListnode(val);newTail.next = rear;newTail.pre = oldTail;oldTail.next = newTail;rear.pre = newTail;}size++;}//在链表中的第index个节点之前添加值为val的节点。如果index等于链表的长度,则该节点将附加到链表的末尾。
// 如果 index 大于链表长度,则不会插入节点。如果index小于0,则在头部插入节点。public void addAtIndex(int index, int val) {// 如果 index 大于链表长度,则不会插入节点。if (index > size) {return;//如果 index 等于链表的长度,则该节点将附加到链表的末尾。} else if (index == size) {addAtTail(val);// 如果index小于0,则在头部插入节点。} else if (index < 0) {addAtHead(val);//插到中间的情况} else {LinkedListnode oldNode = getNode(index);LinkedListnode oldNodePre = oldNode.pre;LinkedListnode newNode = new LinkedListnode(val);newNode.pre = oldNodePre;newNode.next = oldNode;oldNode.pre = newNode;oldNodePre.next = newNode;size++;}}//如果索引 index 有效,则删除链表中的第 index 个节点。public void deleteAtIndex(int index) {
//index无效if (index < 0 || index > size - 1 || size <= 0) {return;}//要删除的节点LinkedListnode node = getNode(index);LinkedListnode nodePre = node.pre;LinkedListnode nodeNext = node.next;nodePre.next = nodeNext;nodeNext.pre = nodePre;size--;}public static void main(String[] args) {MyLinkedList list=new MyLinkedList();list.addAtTail(1);list.addAtTail(2);list.addAtTail(3);list.addAtTail(4);list.addAtTail(5);list.addAtTail(6);list.deleteAtIndex(5);System.out.println(list.size());System.out.println(list.get(4));}
}class LinkedListnode {//节点前指针域LinkedListnode pre;//节点指针域LinkedListnode next;//数据Object val;public LinkedListnode(Object val) {this.val = val;}
}

构造与实现
栈可以由数组(顺序栈),链表实现(链式栈),实现【后进先出】的特性,可以增加一个top指针,通过top的合理操作实现,为栈预设一个基本容量,当栈的空间不够使用时进行扩容,使用size变量记录栈大小。
在这里插入图片描述

注意:在弹栈和取栈顶元素时要先判空。
压栈和弹栈
以顺序栈为例,压栈时top指针自加1,指向新元素,返回新元素;弹栈时top自减1,这样top可以一直指向栈顶元素,返回删除的top加一元素;
栈顶元素
top指向即为栈顶元素,返回数组的top下标
判空
top=0时栈为空
清空栈
top归零返回一个新数组即可
基本操作如上,具体细节见代码,以顺序栈为例

public class MyStack {// 向栈当中存储元素,存到栈中,就表示存储到数组中。// Object类型数组,这里测试用,类型不固定private Object[] elements;// 栈帧,永远指向栈顶部元素private int top;//无参数构造方法。默认初始化栈容量10.是容量而非栈的大小;后面可扩容。public MyStack() {// 默认初始化容量是10.this.elements = new Object[10];// 给栈帧初始化this.top = -1;}//指定容量的有参初始构造public MyStack(int capacity) {// 默认初始化容量是10.this.elements = new Object[capacity];// 给top初始化this.top = -1;}//压栈public void push(Object obj){if(top >= elements.length - 1){//扩容elements=grow(elements);}// 向栈中加1个元素,栈帧向上移动一个位置。top++;elements[top] = obj;//压栈测试
//        System.out.println("压栈" + obj + "元素成功,栈帧指向" + index);}public int size(){return top+1;}private Object[] grow(Object[] elements) {Object[] newE;newE = Arrays.copyOf(elements,elements.length*2);return newE;}//弹栈public Object pop() throws MyStackOperationException {if(top < 0){throw new MyStackOperationException("弹栈失败,栈已空!");}//  System.out.print("弹栈" + elements[index] + "元素成功,");//弹栈测试// 栈帧向下移动一位。top--;//返回为删除值return elements[top +1];}
//判空public boolean isEmpty(){//栈帧为-1 时栈空if(top <0){return true;}return false;}//取栈顶元素public Object peek() throws MyStackOperationException {if(top < 0){throw new MyStackOperationException("弹栈失败,栈已空!");}return elements[top];}
//清空栈public void clear(){//重构一次this.elements = new Object[10];this.top = -1;}public Object[] getElements() {return elements;}public void setElements(Object[] elements) {this.elements = elements;}public int getTop() {return top;}public void setTop(int top) {this.top = top;}
}//自定义栈空异常
class MyStackOperationException extends Exception{public MyStackOperationException(){}public MyStackOperationException(String s){super(s);}}

队列

构造
队列也可以使用两种结构实现,为了实现队列的【先入先出】特点,可以采用两个指针front,rear,分别在两端实现元素的增删;但事实上,对于链式存储,我们仅仅需要一个start指针记录队头。
在这里插入图片描述
增加
队列增加元素,向链表尾部存入元素即可。元素会存储在链表中。
删除
删除元素,需要上文提到的start队头指针,链表数据没有删除,但用于记录队头的指针向后移,即实现了队列的删除
在这里插入图片描述

public class MyQueue {// 数据private final List<Object> data;// 头指针private int pStart;private int size;public MyQueue() {//链表实现data = new LinkedList<>();pStart = 0;size = 0;}//入队public void enQueue(int x) {data.add(x);size++;}//出队public void deQueue() {//判空if (isEmpty()) {return;}pStart++;size--;}//取得队头元素public Object front() {return data.get(pStart);}//判空public boolean isEmpty() {return pStart >= data.size();}public int size(){return size;}public List<Object> getData() {return data;}public int getpStart() {return pStart;}public void setpStart(int pStart) {this.pStart = pStart;}public int getSize() {return size;}public void setSize(int size) {this.size = size;}public static void main(String[] args) {MyQueue q = new MyQueue();q.enQueue(5);q.enQueue(3);if (!q.isEmpty()) {System.out.println(q.front());}q.deQueue();if (!q.isEmpty()) {System.out.println(q.front());}q.deQueue();if (!q.isEmpty()) {System.out.println(q.front());}}}

三、常见使用算法

数组

数组的应用非常广泛,由于其特性常出现在各种环境下,其索引结构也常用于字符串问题的解决。在使用的时候我们常常要对数组进行各种操作,下面简要说常用的.

1、排序

这里的排序一般是针对数字和字母。数组的排序方式有很多,如,选择排序,冒泡排序,插入排序等;事实上java提供了Arrays工具类的排序sort方法,这个排序算法是Vladimir Yaroslavskiy、Jon Bentley和Joshua Bloch的双轴快速排序。此算法在所有数据集上提供O(n log(n))性能,通常比传统的(单轴)快速排序实现更快。
这个算法效率很优秀,但我没有单独实现(。。。)

下面三种算法平均时间复杂度均有O(n^2),快速排序时间平均复杂度为O(nlog(2n))
冒泡排序
1、每一次循环结束之后,都要找出最大的数据,放到参与比较的这堆数据的最右边。(冒出最大的那个气泡。)
2、核心:
拿着左边的数字和右边的数字比对,当左边 > 右边的时候,交换位置。
在这里插入图片描述

//循环长度减一次for(int i = arr.length-1; i > 0; i--){for(int j = 0; j < i; j++){// 不管是否需要交换位置,总之是要比较一次的。//count++;//记录比较次数if(arr[j] > arr[j+1]){// 交换位置。// arr[j] 和 arr[j+1] 交换int temp;temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;//count2++;//交换位置的次数}}}

选择排序
1、每一次从这堆“参与比较的数据当中”找出最小值,
2、拿着这个最小值和“参与比较的这堆最前面的元素”交换位置。

选择排序比冒泡排序好在:每一次的交换位置都是有意义的。

在这里插入图片描述

for(int i = 0; i < arr.length - 1; i++){// 假设起点i下标位置上的元素是最小的。int min = i;for(int j = i+1; j < arr.length; j++){if(arr[j] < arr[min]){min = j; //最小值的元素下标是j}}// 当i和min相等时,表示最初猜测是对的。// 当i和min不相等时,表示最初猜测是错的,有比这个元素更小的元素,// 需要拿着这个更小的元素和最左边的元素交换位置。if(min != i){// 表示存在更小的数据// arr[min] 最小的数据// arr[i] 最前面的数据int temp;temp = arr[min];arr[min] = arr[i];arr[i] = temp;}}

插入排序
1、将已排好的数组(没有就从第一个)和未排好的数组分开
2、从未排好的数组取出元素与前面的数组依次比较,找到自己的位置
···在这里插入图片描述

       for (int i = 0; i < arr.length - 1; i++) {// 待插入的元素暂存到value.int value = arr[i + 1];int j = i;// j < 0 时退出循环,说明 j 是最小的元素的索引值。// 或者 arr[j] <= value 时退出循环,说明 j 是比value小的元素的索引值。for (; j >= 0 && arr[j] > value; j--) {// 把元素往后挪。arr[j + 1] = arr[j];}// 把待插入元素,放到正确位置。arr[j + 1] = value;}

快速排序
1、先从数组中取出一个数作为基准数;
2、分区过程中比他大的放右边,比他小的放左边
3、对左右区间分别重复2操作,直到只剩一个数
在这里插入图片描述

   private static void quickSort(int[] arr){quickSort(arr,0,arr.length-1);}private static void quickSort(int[] arr, int left, int right) {//如果left等于right,即数组只有一个元素,直接返回if(left>=right) {return;}//设置最左边的元素为基准值int key=arr[left];//数组中比key小的放在左边,比key大的放在右边,key值下标为iint i=left;int j=right;while(i<j){//j向左移,直到遇到比key小的值while(arr[j]>=key && i<j){j--;}//i向右移,直到遇到比key大的值while(arr[i]<=key && i<j){i++;}//i和j指向的元素交换if(i<j){int temp=arr[i];arr[i]=arr[j];arr[j]=temp;}}arr[left]=arr[i];arr[i]=key;quickSort(arr,left,i-1);quickSort(arr,i+1,right);}

2、查找

数组针对某元素的查找一般采用二分查找,事实上,由许多更好的查找算法,如插值查找、分块查找。
简单提一下顺序查找,所谓顺序查找,即遍历数组找到想要的元素
二分查找
1、每次取数组的中间值与查找值比较,若等于则查找到结果,
2、大于去右边数组执行1,小于则取左边数组执行1
3、当取得的数组只有一个元素或者查找到结果结束。
在这里插入图片描述

//arr为数组,dest为查找值
public static int binarySearch(int[] arr, int dest) {// 开始下标int begin = 0;// 结束下标int end = arr.length - 1;// 开始元素的下标只要在结束元素下标的左边,就有机会继续循环。while(begin <= end) {// 中间元素下标int mid = (begin + end) / 2;if (arr[mid] == dest) {return mid;} else if (arr[mid] < dest) {// 目标在“中间”的右边// 开始元素下标需要发生变化(开始元素的下标需要重新赋值)begin = mid + 1; // 一直增} else {// arr[mid] > dest// 目标在“中间”的左边// 修改结束元素的下标end = mid - 1; // 一直减}}return -1;}

3、双指针的应用

在解决实际问题时,我们可以将数组的指针设置为两个,甚至多个;
但最常用的还是双指针,两种常用的方法如下图
在这里插入图片描述
在这里插入图片描述
这个需要在题库中多练习一些才能可以熟练使用。

链表

链表的应用也很多,常用方法为虚拟节点,双指针,下面以问题引入算法应用。

1、链表逆序

举个例题,对于一个以head为头节点的链表将其逆序,且不允许申请额外空间。
在这里插入图片描述
链表的逆序通常有两个常用思路:递归和迭代,
1、递归常常用反复调用函数自己体现,对于链表逆序来说,这个函数需要做到1需要递归足够的次数满足题意,即参数几乎要覆盖链表,2调用一次函数更改一次节点的指向。3终止条件为节点为空。这个稍微不太好理解,具体见代码
2是双指针的思想,对于一个链表的逆序,定义两个指针,pre和cur前后指针,pre指向head前的null,cur指向head,对两个指针进行遍历,,每移动一次将cur的next指向pre;每遍历一个节点则逆置一个节点。

在这里插入图片描述
补充:如果没要求也可以用栈。将链表里的元素放进栈在出栈即可。

1,2实现:

public ListNode reverseList(ListNode head) {//递归终止条件是当前为空,或者下一个节点为空,函数条件3//head.next == null,这是为了找出链表的最后一个节点。//另外一个条件是终止递归。if(head==null || head.next==null) {return head;}//这里的cur如果不是最后一个节点,就会重新调用直到是最后一个节点//用这个可以满足函数条件1,ListNode cur = reverseList(head.next);//如果链表是 1->2->3->4->5,那么此时的cur就是5//而head是4,head的下一个是5,下下一个是空//所以head.next.next 就是5->4,函数条件二//上面调用了4次这个函数,每次调用都会执行下面的语句。//调用四次函数表面上都没执行完,每次后面的语句会存在java隐式栈中当上面结束了下面开始重新执行。根据栈后进先出,会根据head=4,3,2,1时执行下语句。head.next.next = head;//防止最终链表循环,需要将head.next设置为空//因为上面5 -> 4,所以清除了原来的4 -> 5。head.next = null;//每层递归函数都返回cur,也就是最后一个节点//这里其实是递归调用,并非固定值,尽管每轮cur都为5,但head一直在变return cur;}
public ListNode reverseList(ListNode head) {//申请节点,pre和 cur,pre指向nullListNode pre = null;ListNode cur = head;ListNode tmp = null;while(cur!=null) {//记录当前节点的下一个节点tmp = cur.next;//然后将当前节点指向precur.next = pre;//pre和cur节点都前进一位pre = cur;cur = tmp;}return pre;}

2、链表求交点

对于两个链表a,b求其交点
在这里插入图片描述
两个思路
1、双指针同向移动。向两个链表a,b设置两个指针指向头节点,若a,b链表长度不相同,将长的链表指针向后移动|a.length-b.length|个单位,这时两个指针在同一起跑线上,同时同速度往后遍历,当指向节点相同时,找到交点。
在这里插入图片描述

2、先把第一个链表的节点全部存放到集合set中,然后遍历第二个链表的每一个节点,判断在集合set中是否存在,如果存在就直接返回这个存在的结点。

3、链表求环

如图、求链表的环起始节点。
在这里插入图片描述
两个思路
1、使用集合set,遍历链表,加入集合set,只要在set中发现已有的节点,即为环起始节点。
2、快慢指针,fast和slow指针同时从起点出发,fast一次移动两格,slow一格,如果相遇,则有环。设相遇点为meet,则从meet与head头节点开始移动的两个同速指针的相遇点,就是环的起点。
在这里插入图片描述

4、链表归并

对于已排序的n个链表,求其合并后的头节点。要求,合并后依然有序。

思路
1、暴力合并,虚拟一个头节点,然后比较这n个链表的第i(i=0,1,2……)个元素,再插入head后面。
2、分治思想,这也是快排的思想核心,将链表间两两暴力合并,最后在合并。
3、使用集合TreeSet,将所有节点放进去在取出来连成链表。

5、链表划分

将链表以值x为界,大于x的放右边,反之放左边,不改变相对顺序。

思路
使用一个临时的虚拟节点,然后遍历,大的放右边,小的放左边。

栈和队列

下面这两种结构常由其特性而可以具体解决某些问题,

1、队列实现栈

两种方法(搬运自力扣225题)
两个队列
为了满足栈的特性,即最后入栈的元素最先出栈,在使用队列实现栈时,应满足队列前端的元素是最后入栈的元素。可以使用两个队列实现栈的操作,其中queue 1用于存储栈内的元素,queue 2作为入栈操作的辅助队列。
入栈操作时,首先将元素入队到 queue 2,然后将queue 1的全部元素依次出队并入队到queue 2,此时queue 2的前端的元素即为新入栈的元素,再将 queue 1 和 queue 2互换,则queue 1 的元素即为栈内的元素,queue 1的前端和后端分别对应栈顶和栈底。由于每次入栈操作都确保 queue 1 的前端元素为栈顶元素,因此出栈操作和获得栈顶元素操作都可以简单实现。出栈操作只需要移除 queue 1的前端元素并返回即可,获得栈顶元素操作只需要获得queue 1 的前端元素并返回即可(不移除元素)。由于 \textit{用于存储栈内的元素,判断栈是否为空时,只需要判断 queue 1 是否为空即可。
使用一个队列时,为了满足栈的特性,即最后入栈的元素最先出栈,同样需要满足队列前端的元素是最后入栈的元素。
一个队列
入栈操作时,首先获得入栈前的元素个数 nn,然后将元素入队到队列,再将队列中的前 nn 个元素(即除了新入栈的元素之外的全部元素)依次出队并入队到队列,此时队列的前端的元素即为新入栈的元素,且队列的前端和后端分别对应栈顶和栈底。由于每次入栈操作都确保队列的前端元素为栈顶元素,因此出栈操作和获得栈顶元素操作都可以简单实现。出栈操作只需要移除队列的前端元素并返回即可,获得栈顶元素操作只需要获得队列的前端元素并返回即可(不移除元素)。由于队列用于存储栈内的元素,判断栈是否为空时,只需要判断队列是否为空即可。

2、栈与递归

3、栈实现计算器

用栈实现对字符串的计算,如"1+2+3"结果为6,"1*(2+3)"结果为5;

总结

本文主要记录了一下线性数据结构的基本原理和java中使用,文笔多有不足,文中有不足的希望可以指出。

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. U盘安装ubuntu18.04 LTS图文详细过程

    扣扣技术交流群&#xff1a;460189483 制作U盘引导盘&#xff0c;安装Ubuntu18.04 LTS系统 一、下载Ubuntu18.04 LTS系统的iso文件 镜像下载地址 https://www.ubuntu.com/download/desktop 下载后的文件&#xff1a;ubuntu-18.04.4-desktop-amd64.iso 二、制作U盘启动系统 …...

    2024/4/24 15:19:34
  2. maven

    一、我们创建的maven项目所用到的所有的jar包统统都在maven仓库中&#xff0c;而仓库地址在国外&#xff0c;所以需要将中央仓库的地址换成国内的地址&#xff0c;常常用阿里的镜像&#xff0c;另外&#xff0c;我们下载的jar包时&#xff0c;会将所有的依赖都下载到本地C盘&am…...

    2024/4/28 3:22:35
  3. 第十一届蓝桥杯C++B组 试题E:七段码

    试题EE&#xff1a;七段码 【问题描述】 上图给出了七段码数码管的一个图示&#xff0c;数码管中一共有 77 段可以发光的二 极管&#xff0c;分别标记为 a,b,c,d,e,f,ga,b,c,d,e,f,g。 小蓝要选择一部分二极管&#xff08;至少要有一个&#xff09;发光来表达字符。在设计字符…...

    2024/4/28 6:24:50
  4. 动态规划算法

    动态规划 动态规划的性质&#xff1a; &#xff08;1&#xff09;最优化原理&#xff1a;如果问题的最优解所包含的子问题的解也是最优的&#xff0c;就称该问题具有最优子结构&#xff0c;即满足最优化原理。 &#xff08;2&#xff09;无后效性&#xff1a;即某阶段状态&…...

    2024/4/21 16:55:43
  5. 电容,电阻,二极管,三极管

    目录 电容作用 电容和电阻的区别 电子元器件 二极管:单向导电 三极管的作用 电容作用 滤波&#xff08;Wave filtering&#xff09;是将信号中特定波段频率滤除的操作&#xff0c;是抑制和防止干扰的一项重要措施&#xff0c;滤波分为经典滤波和现代滤波。 1、电容具有滤波…...

    2024/4/20 14:10:20
  6. 递归数组转数的写法

    ...

    2024/4/20 14:10:19
  7. 关于Mapreduce的优化

    MapReduce性能的瓶颈&#xff1a; 作为分布式系统程序&#xff0c;MapReduce的瓶颈主要表现在两个方面&#xff1a; 1.计算机性能&#xff1a;包括CPU、内存、磁盘健康、网络 2.I/O操作优化&#xff1a;数据倾斜、Map和Reduce数设置不合理等 所以优化方法主要从六个方面考虑&am…...

    2024/4/27 15:27:56
  8. React中组件的三大属性(state, props, ref)

    state 理解&#xff1a; state是组件对象最重要的属性&#xff0c;值是一个对象&#xff0c;包含多个key value组合&#xff0c;也就是说可以包含多个状态。组件也被称为状态机&#xff0c;通过更新组件的state来更新对应的页面显示。有state状态的组件叫做复杂组件&#xff…...

    2024/4/27 16:36:26
  9. 邮件营销(群发邮件)

    自己编程 python 群发工具&#xff0c;做统计 https://www.v1tx.com/post/best-email-marketing-tools/ MailChimp https://www.wayincloud.com/features...

    2024/4/27 19:39:34
  10. dataframe按照某一列的取值进行拆分

    dataframe按照某一列&#xff08;假设列名为columnname)的取值进行拆分。 即&#xff1a;比如dataframe的第一列只有‘a’、‘b’两种取值可能&#xff0c;就把dataframe拆分成两个小的dataframe&#xff0c;一个dataframe的第一列只取‘a’&#xff0c;另一个dataframe的第一…...

    2024/4/27 19:04:25
  11. BING搜索引擎技巧

    1.在B类中搜A&#xff0c;A且B格式为&#xff1a;AB 例如搜索引擎中输入”小明宇航员“&#xff0c;即可出现结果为宇航员 2.在非B类中搜索A&#xff0c;A非B格式为&#xff1a;A-B 3.指定在某网站搜索A&#xff0c;格式&#xff1a;A site:https://pan.baidu.com/s/ 在sit…...

    2024/4/27 14:11:51
  12. Java笔记(设计模式:工厂方法模式):

    1.工厂方法模式: 1)工厂方法模式: 工厂方法模式中抽象工厂类负责定义创建对象的接口&#xff0c;具体对象的创建工作由 继承抽象工厂的具体类实现。 2)利弊: 优点:具体的工厂类负责创建当前具体的实例,结构层次很清晰,有具体类/工厂类/抽象工厂(接口) 弊端:有新的类型增加,需…...

    2024/4/27 20:17:21
  13. POJ - 3278 Catch That Cow(BFS——广度优先搜索)

    Farmer John has been informed of the location of a fugitive cow and wants to catch her immediately. He starts at a point N (0 ≤ N ≤ 100,000) on a number line and the cow is at a point K (0 ≤ K ≤ 100,000) on the same number line. Farmer John has two mod…...

    2024/4/27 17:20:23
  14. PX4代码解析(1)

    前言 做pixhawk飞控有一段时间了&#xff0c;但在学习过程中遇到许多困难&#xff0c;目前网上找不到比较完整的PX4学习笔记&#xff0c;我打算结合自己理解&#xff0c;写写自己对PX4源码的理解&#xff0c;不一定对&#xff0c;只是希望与各位大佬交流交流&#xff0c;同时梳…...

    2024/4/27 18:26:08
  15. 批量更改文件后缀时.bat文件不起作用的问题

    批量更改文件后缀时.bat文件不起作用。 原因&#xff1a; 是“新建的文本文档”没有因为后缀.txt改为.bat就变成了.bat文件&#xff0c;此时的新建文本文档仍然是.txt格式。 解决方法&#xff1a; 1、打开“此电脑”。 2、点击此电脑中左上角的“查看”。 3、点击“文件扩展名…...

    2024/4/27 17:37:42
  16. 李航《统计学习方法》第二版第一章-生成模型和判别模型

    判别模型只关心样本属于哪一类 生成模型估计联合概率分布&#xff0c;判别模型估计条件概率分布 1、生成模型&#xff1a;通过联合分布得到条件概率分布&#xff1b;关注数据内部关系&#xff0c;对联合分布建模&#xff0c;关注样本分布&#xff0c;如何生成 2、判别方法&am…...

    2024/4/27 20:53:28
  17. “21天好习惯”第一期——4

    作业与我的代码&#xff1a; 运行结果&#xff1a;...

    2024/4/27 14:29:53
  18. “21天好习惯”第一期-1 飞机大战-1

    1.创建对战窗口&#xff0c;上面有一个计分器、下面是对战的窗口 <div class"info">分数<span class"score"></span> </div> <div class"gameBox"></div> .info { text-align: center; font-size: 30px; …...

    2024/4/27 15:58:15
  19. 344 观光之旅(floyd算法求解最小环)

    1. 问题描述&#xff1a; 给定一张无向图&#xff0c;求图中一个至少包含 3 个点的环&#xff0c;环上的节点不重复&#xff0c;并且环上的边的长度之和最小。该问题称为无向图的最小环问题。你需要输出最小环的方案&#xff0c;若最小环不唯一&#xff0c;输出任意一个均可。…...

    2024/4/27 13:28:20
  20. Solidity

    Solidity 文章目录Solidity结构变量类型值类型引用类型类型转换运算符类型推断内置单位、全局变量和函数货币单位时间单位区块和交易属性异常处理数学和加密函数与合约相关的变量和函数控制结构语句函数可见性状态可变性fallback函数函数修改器异常处理事件和日志智能合约的继承…...

    2024/4/27 15:41:54

最新文章

  1. 沪深websocket level2/level1行情推送测试代码

    引入行情包 package mainimport ("hangqing""log""time" )const token "***"//level1行情处理入口 func onLv1(s string) {//todo 处理逻辑log.Println(s) }//level2行情处理入口 func onLv2(s string) {//todo 处理逻辑log.Println…...

    2024/4/28 8:56:49
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. ChatGPT 初学者指南

    原文&#xff1a;ChatGPT for Beginners 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 介绍 如果您一直关注新闻和趋势&#xff0c;您可能已经在某个地方读到或听到过&#xff0c;Sam Altman 的生成式人工智能平台 ChatGPT 已经将人工智能推向了一个新的高度 - 许多…...

    2024/4/27 12:58:33
  4. MySQL 底层数据结构 聚簇索引以及二级索引 Explain的使用

    数据结构 我们知道MySQL的存储引擎Innodb默认底层是使用B树的变种来存储数据的 下面我们来复习一下B树存储 B树存储 哈希存储的区别 哈希存储,只能使用等值查询 B树与B树存储 我们知道B树实际上就是B树的变种 那么为啥使用B树而不是使用B树呢? 我们知道效率的高低主要取决于…...

    2024/4/23 6:22:51
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/4/26 18:09:39
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/4/28 3:28:32
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/26 23:05:52
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/4/27 4:00:35
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/27 17:58:04
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/27 14:22:49
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/28 1:28:33
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/27 9:01:45
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/27 17:59:30
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/4/25 18:39:16
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/28 1:34:08
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/28 1:22:35
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/25 18:39:14
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/4/26 23:04:58
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/27 23:24:42
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/28 5:48:52
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/26 19:46:12
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/4/27 11:43:08
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/27 8:32:30
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57