LeetCode刷题--点滴记录004

Posted 鲁棒最小二乘支持向量机

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode刷题--点滴记录004相关的知识,希望对你有一定的参考价值。

4. 图解算法数据结构

数据结构是为实现对计算机数据有效使用的各种数据组织形式,服务于各类计算机操作。不同的数据结构具有各自对应的适用场景,旨在降低各种算法计算的时间与空间复杂度,达到最佳的任务执行效率。

常见的数据结构

线性数据结构 : 数组(Array);链表(Linked List);栈(Stack);队列(Queue)
非线性数据结构 : 数(Tree);堆(Heap);散列表(Hashing);图(Graph)

数组(Array)

数组是将相同类型的元素存储于连续内存空间的数据结构,其长度不可变。
C++版本

#include <iostream>
using namespace std;
#include <vector>

void printVector(vector<int>& v)

	for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
	
		cout << *it << " ";
	
	cout << endl;

template <class T>
void printArray(T& array)

    for (int i = 0; i < sizeof(array)/sizeof(array[0]); i++)
    
        cout << array[i] << " ";
    
    cout << endl;

void test01()

    // 初始化一个长度为 5 的数组
    int array[5];
    // 元素赋值
    array[0] = 0;
    array[1] = 1;
    array[2] = 2;
    array[3] = 3;
    array[4] = 4;

    printArray(array);


void test02()

    int array[] =  0, 1, 2, 3, 4 ;

    printArray(array);


void test03()

    // 初始化可变数组
    vector<int> array;

    // 向尾部添加元素
    array.push_back(0);
    array.push_back(1);
    array.push_back(2);
    array.push_back(3);
    array.push_back(4);

    printVector(array);

int main()

    test01();
    cout << "------------------" << endl;
    test02();
    cout << "------------------" << endl;
    test03();

    system("pause");
    return 0;

Python版本

def test01():
    array = [1, 2, 3, 4, 5]
    print(array)
def test02():
    # 初始化可变数组
    array = []

    # 向尾部添加元素
    array.append(1)
    array.append(2)
    array.append(3)
    array.append(4)
    array.append(5)
    
    print(array)
    # 切片
    print(array[0:3])
    print(array[:3])
    print(array[1:4])
    print(array[2:])
    
def test03():
    array = list(range(1,6))
    print(array)
    arrayeven = list(range(2,6,2))
    print(arrayeven)
    arrayodd = list(range(1,6,2))
    print(arrayodd)
            
if __name__=="__main__":
    test01()
    print("--------------")
    test02()
    print("--------------")
    test03()

Java版本

package com.hailei_01;

import java.util.ArrayList;
import java.util.List;

public class array 
    public static void main(String[] args) 
        // 初始化一个长度为 5 的数组 array
        int[] array1 = new int[5];
        // 元素赋值
        array1[0] = 1;
        array1[1] = 2;
        array1[2] = 3;
        array1[3] = 4;
        array1[4] = 5;
        for(int i=0;i<array1.length;i++)
        
            System.out.print(array1[i]+" ");
        
        System.out.println("\\n------------");

        int[] array2 = 1, 2, 3, 4, 5;
        for(int a:array2) //增强for
        
            System.out.print(a+" ");
        
        System.out.println("\\n------------");

        // 初始化可变数组
        List<Integer> array3 = new ArrayList<>();

        // 向尾部添加元素
        array3.add(1);
        array3.add(2);
        array3.add(3);
        array3.add(4);
        array3.add(5);

        System.out.println(array3);
    

链表(Linked List)

链表以节点为单位,每个元素都是一个独立对象,在内存空间的存储是非连续的。
C++版本

struct ListNode 
    int val;        // 节点值
    ListNode* next; // 后继节点引用
    ListNode(int x) : val(x), next(NULL) 
;
void print(ListNode* phead)//输出

    ListNode* p = phead;
    while (p != NULL)
    
        cout << p->val << " ";
        p = p->next;
    
    cout << endl;

void test01()

    // 实例化节点
    ListNode* n1 = new ListNode(1); // 节点 head
    ListNode* n2 = new ListNode(2);
    ListNode* n3 = new ListNode(3);

    // 构建引用指向
    n1->next = n2;
    n2->next = n3;
    //打印输出
    print(n1);
    cout << "----------" << endl;
    print(n2);

int main()

    test01();

    system("pause");
    return 0;

Python版本

#include <iostream>
using namespace std;
class ListNode:
    def __init__(self, x):
        self.val = x     # 节点值
        self.next = None # 后继节点引用
        
def print_ListNode(node):
    while node:
        print(node.val, end=' ')
        node = node.next
        
def test01():
    # 实例化节点
    n1 = ListNode(3) # 节点 head
    n2 = ListNode(2)
    n3 = ListNode(1)

    # 构建引用指向
    n1.next = n2
    n2.next = n3
    print_ListNode(n1)
    print("\\n--------------") 
    print_ListNode(n2)

if __name__=="__main__":
    test01()


Java版本

package com.hailei_02;

public class listNode 
    public static void main(String[] args) 
        // 实例化节点
        ListNode n1 = new ListNode(9); // 节点 head
        ListNode n2 = new ListNode(3);
        ListNode n3 = new ListNode(6);

        // 构建引用指向
        n1.next = n2;
        n2.next = n3;

        printListNode(n1);
        System.out.println("\\n-------------");
        printListNode(n3);

    

    public static class ListNode 
        int val;       // 节点值
        ListNode next; // 后继节点引用
        ListNode(int x)  val = x; 
    

    public static void printListNode(ListNode headNode) 
        ListNode listNode = headNode;
        while(listNode!=null) 
            System.out.print(listNode.val+" ");
            listNode = listNode.next;
        
    

栈(Stack)

栈是一种具有 先入后出 特点的抽象数据结构,可使用数组或链表实现。

C++版本

#include <iostream>
using namespace std;
#include <stack>
void test01()

    stack<int> stk;

    stk.push(1); // 元素 1 入栈
    stk.push(2); // 元素 2 入栈
    cout << "栈顶元素为:" << stk.size() << endl;
    stk.push(3); // 元素 3 入栈
    stk.push(4); // 元素 4 入栈
    cout << "栈顶元素为:" << stk.size() << endl;
    stk.pop();   // 出栈 -> 元素 4
    stk.pop();   // 出栈 -> 元素 3
    cout << "栈顶元素为:" << stk.size() << endl;
    stk.pop();   // 出栈 -> 元素 2
    stk.pop();   // 出栈 -> 元素 1
    cout << "栈顶元素为:" << stk.size() << endl;


int main()

    test01();

    system("pause");
    return 0;

Python版本

def test01():
    stack = [] # Python 可将列表作为栈使用
    stack.append(1) # 元素 1 入栈
    stack.append(2) # 元素 2 入栈
    print(stack)
    stack.append(3) # 元素 3 入栈
    stack.append(4) # 元素 4 入栈
    print(stack)
    stack.pop()     # 出栈 -> 元素 4
    stack.pop()     # 出栈 -> 元素 3
    print(stack)
    stack.pop()     # 出栈 -> 元素 2
    stack.pop()     # 出栈 -> 元素 1
    print(stack)

if __name__=="__main__":
    test01()

Java版本

package com.hailei_03;

import java.util.LinkedList;

public class stack 
    public static void main(String[] args) 
        LinkedList<Integer> stack = new LinkedList<>();

        stack.addLast(1);   // 元素 1 入栈
        stack.addLast(2);   // 元素 2 入栈
        stack.addLast(3);   // 元素 3入栈
        stack.addLast(4);   // 元素 4 入栈
        System.out.println("第一个元素:"+stack.getFirst());
        System.out.println("最后一个元素:"+stack.getLast());
        stack.removeLast(); // 出栈 -> 元素 4
        stack.removeLast(); // 出栈 -> 元素 3
        System.out.println("第一个元素:"+stack.getFirst());
        System.out.println("最后一个元素:"+stack.getLast());
        stack.removeLast(); // 出栈 -> 元素 2
        stack.removeLast(); // 出栈 -> 元素 1
    

队列(Queue)

队列是一种具有 先入先出 特点的抽象数据结构,可使用链表实现。

C++版本

#include <iostream>
using namespace std;
#include <queue>
void test01()

    queue<int> que;

    que.push(1); // 元素 1 入队
    que.push(2); // 元素 2 入队
    que.push(3); // 元素 3 入队
    que.push(4); // 元素 4 入队
    cout << "队头元素为:" << que.front() << endl;
    cout << "队尾元素为:" << que.back() << endl;
    que.pop();   // 出队 -> 元素 1
    que.pop();   // 出队 -> 元素 2
    cout << "队头元素为:" << que.front() << endl;
    cout << "队尾元素为:" << que.back() << endl;
    que.pop();   // 出队 -> 元素 3
    que.pop();   // 出队 -> 元素 4
    cout << "队列元素为:" << que.size() << endl;

int main()

    test01();

    system("pause");
    return 0;


Python版本

from collections import deque


def test01():
    que = deque()
    que.append(1) # 元素 1 入队
    que.append(2) # 元素 2 入队
    que.append(3) # 元素 3 入队
    que.append(以上是关于LeetCode刷题--点滴记录004的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode刷题--点滴记录012

LeetCode刷题--点滴记录014

LeetCode刷题--点滴记录017

LeetCode刷题--点滴记录015

LeetCode刷题--点滴记录005

LeetCode刷题--点滴记录003