You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
92 lines
3.0 KiB
Markdown
92 lines
3.0 KiB
Markdown
# Deque
|
|
|
|
[![NPM version][npm-image]][npm-url]
|
|
[![NPM downloads][downloads-image]][downloads-url]
|
|
[![Build status][travis-image]][travis-url]
|
|
[![Test coverage][coveralls-image]][coveralls-url]
|
|
|
|
> Deques are a generalization of stacks and queues (the name is pronounced "deck" and is short for "double-ended queue").
|
|
> -- [Python `collections`](https://docs.python.org/3/library/collections.html#collections.deque).
|
|
|
|
## Installation
|
|
|
|
```
|
|
npm install @blakeembrey/deque --save
|
|
```
|
|
|
|
## Usage
|
|
|
|
- `size` Returns the number of elements in the deque.
|
|
- `push(x)` Add `x` to right side of the deque.
|
|
- `pushLeft(x)` Add `x` to the left side of the deque.
|
|
- `clear()` Remove all elements from the deque leaving it with length 0.
|
|
- `extend(iterable)` Extend the right side of the deque by appending elements from iterable.
|
|
- `extendLeft(iterable)` Extend the left side of the deque by appending elements from iterable.
|
|
- `peek(i)` Return the element at index `i` in the deque.
|
|
- `indexOf(x, start?)` Return the position of `x` in the deque.
|
|
- `has(x)` Return a boolean indicating whether `x` is in the deque.
|
|
- `insert(i, x)` Insert `x` into the deque at position `i`.
|
|
- `pop()` Remove and return an element from the right side of the deque. If no elements are present, throws `RangeError`.
|
|
- `popLeft()` Return and return an element from the left side of the deque. If no elements are present, throws `RangeError`.
|
|
- `delete(i)` Delete the value at position `i`.
|
|
- `reverse()` Reverse the elements of the deque in-place.
|
|
- `rotate(n=1)` Rotate the deque `n` steps to the right.
|
|
- `entries()` Return an iterable of deque.
|
|
- `@@iterator()` Return an iterable of deque.
|
|
|
|
```js
|
|
import { Deque } from '@blakeembrey/deque'
|
|
|
|
const d = new Deque('ghi')
|
|
|
|
for (const value of d) {
|
|
console.log(value.toUpperCase()) //=> G H I
|
|
}
|
|
|
|
d.push('j')
|
|
d.pushLeft('f')
|
|
d //=> Deque(['f', 'g', 'h', 'i', 'j'])
|
|
|
|
d.pop() //=> 'j'
|
|
d.popLeft() //=> 'f'
|
|
|
|
Array.from(d) //=> ['g', 'h', 'i']
|
|
|
|
d.peek(0) //=> 'g'
|
|
d.peek(-1) //=> 'i'
|
|
|
|
d.extend('jkl')
|
|
d //=> Deque(['g', 'h', 'i', 'j', 'k', 'l'])
|
|
|
|
d.rotate(1)
|
|
d //=> Deque(['l', 'g', 'h', 'i', 'j', 'k'])
|
|
|
|
d.rotate(-1)
|
|
d //=> Deque(['g', 'h', 'i', 'j', 'k', 'l'])
|
|
|
|
const d2 = new Deque(d)
|
|
|
|
d2 //=> Deque(['g', 'h', 'i', 'j', 'k', 'l'])
|
|
```
|
|
|
|
## TypeScript
|
|
|
|
This project uses [TypeScript](https://github.com/Microsoft/TypeScript) and publishes definitions on NPM.
|
|
|
|
## Reference
|
|
|
|
Circular array implementation originally based on [`denque`](https://github.com/Salakar/denque) with additional optimizations.
|
|
|
|
## License
|
|
|
|
Apache 2.0
|
|
|
|
[npm-image]: https://img.shields.io/npm/v/@blakeembrey/deque.svg?style=flat
|
|
[npm-url]: https://npmjs.org/package/@blakeembrey/deque
|
|
[downloads-image]: https://img.shields.io/npm/dm/@blakeembrey/deque.svg?style=flat
|
|
[downloads-url]: https://npmjs.org/package/@blakeembrey/deque
|
|
[travis-image]: https://img.shields.io/travis/blakeembrey/deque.svg?style=flat
|
|
[travis-url]: https://travis-ci.org/blakeembrey/deque
|
|
[coveralls-image]: https://img.shields.io/coveralls/blakeembrey/deque.svg?style=flat
|
|
[coveralls-url]: https://coveralls.io/r/blakeembrey/deque?branch=master
|