Socket
一、概述
socket通常也称作套接字,用于描述IP地址和端口,用于连接应用层与传输层。
socket网络编程流程见下图:
biubiubiu...
寻找加权图G中src点到图中其他可抵达点的最短路径。我们用适应性强的优先队列去实现最小值提取,队列的选择有两种选择:
1.堆O((n+m)logn)
2.未排序的序列O(n^2)
当边的数量很少(m<n^2/logn)用堆,反之序列。
下面的代码中我们用堆实现。
由于传统的堆并不支持对堆中除头和尾以外的位置的增删改,而在实际情况下我们需要对其他节点进行操作。这里我们在堆原有数据结构基础上进行扩展,
用’定位器‘来实现对堆中其他元素的定位。定位器是指在堆原有节点类中加入一个新属性_index(节点在底层数据结构数组中的秩),然后实列化节点类(locator),
并返回给用户用来定位每一个节点。
反转从位置m到n的链表。请使用一趟扫描完成反转。(1<=m<=n<=lenofthelist)
例子:
input:1->2->3->4->5->NULL, m=2, n=4
output: 1->4->3->2->5->NULL
首先记录m-1的节点(front),然后依次倒置[m,n]之间的节点,期间还要注意m节点的收藏(tail),用来设置tail.next=back,然后记录n+1(back)节点,最后完成n+1,m-1连接。由于倒置是通过不停的选择next节点来完成,为了防止陷入死循环,本次节点(cur)与本次节点next节点(temp)的关系倒置要放到下一次循环中处理,这就需要我们引入pre来记录本次节点。
简而言之,介于[m,n]间的单次循环要完成两项任务:1. 设置temp 2. 完成cur.next = pre。
另外,几个需要注意的小细节,这里的m,n指的是位置,不是类似于数组的秩,是从1开始的。所以在循环倒置时,i也应先加1,表示此次是对第一个位置操作。
代码来源
1 | curl https://raw.github.com/creationix/nvm/v0.33.11/install.sh | sh |
Close and reopen your terminal to start using nvm or run the following to use it now:1
2export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
1 | nvm install stable |