先看一下手工模拟的进制转换,例如10进制转8进制:
N N / 8 N mod 8
1348 168 4
168 21 0
21 2 5
2 0 2
(1348)10 = (2504)8
上述过程很明显了:进制转换就是逐步摸、除之后[......]
先看一下手工模拟的进制转换,例如10进制转8进制:
N N / 8 N mod 8
1348 168 4
168 21 0
21 2 5
2 0 2
(1348)10 = (2504)8
上述过程很明显了:进制转换就是逐步摸、除之后[......]
栈是限定在只能在尾部操作(插入或删除)的线性表。
栈是按照后进先出的,LIFO。
一般来说,栈应该是无上限的,即如果栈满了,应该可以自动扩充。
定义如下的栈结构:
struct Stack
{
int* base;
int* top;
int size;
};
注意,top指向的不是栈顶而是栈顶的下一个元素!
当base==NULL或者top==base时,可以认为栈是空的。
基本操作有push、pop、top(取得栈顶元素但不弹出栈)、isem[......]
一元多项式的表示及相加:
我们定义P(x)=p0+p1*x+p2*x^2...pn*x^n简写为P=(p0, p1, p2...pn)
再定义Q=(q0, q1, 12...qm)
现在要求R = P(X) + q(X),显然,实际上R=(p0+q0, p1+q1, p2+q2 .. pm+1, pn) 假设m<n。
这种应用场景,用顺序存储不合适,它虽然运算简单,但因为很有可能从1~1000次幂都是0,是稀疏的。因此,链表类似的存储更合适。
首先考虑加法,其[......]
1、循环链表:链表中最后一个结点的指针域指向头结点,整个链表形成一个环。
(1)一般要设置尾指针,方便操作。
(2)从表中任意一个结点出发均可以到达其他任意结点。
(3)两个链表合并为新链表是很方便,只需要把第一个尾指针和第二个的头指针连接起来就好了。
下面是循环链表的基本操作:
2、双向链表:在结点中有两个指针域,一个后继、一个前趋。
(1)特性:d->next->pre == d->pre->next == d
(2)插入、删除时都要操作两个指针[......]
今天一朋友问我怎么把一个客户端用Javascript渲染好的页面存成pdf。。然后发现了这么一个东西。
http://www.htmltopdf.de/english/html2pdf-with-javascript/
原理是:它提供了一个HTTP Service,你给他传递你要存为pdf的页面url,它去下载、本地渲染、截图、生成pdf,再传给客户端。
使用很简单:
function getPdf(inline,url){
if(!url) url=document.l[......]