数据结构及算法学习(二)

来源:互联网 发布:条码生成器软件下载 编辑:程序博客网 时间:2024/06/11 19:10

  • 位掩码
    • andor
    • the least significant bit
    • xor
  • 数据结构
    • 单向链表 Linked List
      • 操作
        • get i
        • search v
        • insert i v
        • remove i
    • 堆栈 stack
      • 操作
        • pop
        • pushv
        • peek
    • 队列 queue
      • 操作
        • dequeue
        • enqueuev
        • peek
    • 双向链表Doubly Linked List DLL
      • 操作
        • get i
        • search v
        • insert i v
        • remove i
    • 双端队列 Double-ended Queue
      • 操作

位掩码

我看网站上讲的好少。。。(几乎是什么都没讲)
整理一点小东西

and,or

与,或操作
1010 and 1001 = 1000
1010 or 1001 = 1011

<<,>>

左移右移
001 << 1= 010
1 << 3 = 1000
010 >>1 =001

the least significant bit

和网上给的介绍不太一样
网上说是最后一位,但是网站上 是指从右往左数第一个非0数的位置
比如,48 = 110000,最低的1为从右数第5位,所以the least significant bit是4

xor

异或
数字相同为0 ,不同为1
1010 xor 1001 = 0011

数据结构

单向链表 Linked List

链接列表是由一组顶点(节点)组成的数据结构,它们一起表示一个序列。在最简单的形式下,每个顶点由数据和序列中下一个顶点的引用(链接)组成(即单向链表)。
由于各种操作的时间复杂度比正常的数组都差些,所以…

操作

get (i)

获取i位置的数

search (v)

搜索序列中是否有v,如果有,则返回位置

insert (i, v)

在i位置插入v

remove (i)

删除i位置的数

堆栈 stack

只有一个操作对象,即堆栈的顶,对其进行删除,查看
向堆栈内压入数字,最新压入的会成为堆栈的顶,其它数向下位移
(先进后出 LIFO)

操作

pop()

删除最顶上的数

push(v)

将v压入堆栈

peek()

展示最上面的数

队列 queue

(一群人排队上厕所,大概等同与那个队伍吧)
先入先出(FIFO)

操作

dequeue()

删除队列最开始的数

enqueue(v)

将v加入队列

peek()

展示最开始的数

双向链表Doubly Linked List (DLL)

两边都是头的链表…
每个顶点由数据,序列中上一个顶点的引用(链接)和序列中下一个顶点的引用(链接)组成。
由于两边都是头,所以删除队尾的数据的操作的时间复杂度简单了不少(极大进步!)。

操作

修改顶点的链接需要修改两个了

get (i)

获取i位置的数

search (v)

搜索序列中是否有v,如果有,则返回位置

insert (i, v)

在i位置插入v

remove (i)

删除i位置的数

双端队列 Double-ended Queue

两边都是头的队列
双端队列是限定插入和删除操作在表的两端进行的线性表,是一种具有队列和栈的性质的数据结构。
双端队列中的元素可以从两端进队和出队,其限定插入和删除操作在表的两端进

操作

双端队列提供了3个存取队头元素的函数:
(1)读取队头元素的函数:bool getHead(T& x);
(2)在队头插入新元素的函数:bool EnQueueHead(const T& x);
(3)删除队头元素的函数:bool DeQueueHead(T& x);
双端队列提供了3个存取队尾元素的函数:
(1)读取队尾元素的函数:bool getTail(T& x);
(2)在队尾插入新元素的函数:bool EnQueueTail(const T& x);
(3)删除队尾元素的函数:bool DeQueueTail(T& x);