FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
examples/queue/src/lib.rs at master · ProgrammingRust/examples · GitHub
Uh oh!
There was an error while loading.
Please reload this page
.
ProgrammingRust
/
examples
Public
Notifications
You must be signed in to change notification settings
Fork
260
Star
1.2k
Code
Issues
4
Pull requests
9
Actions
Projects
Security and quality
0
Insights
Additional navigation options
Code
Issues
Pull requests
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
examples
/
queue
/
src
/
lib.rs
Copy path
More file actions
More file actions
Latest commit
History
History
History
112 lines (92 loc) · 2.57 KB
Breadcrumbs
examples
/
queue
/
src
/
lib.rs
Copy path
File metadata and controls
112 lines (92 loc) · 2.57 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#!
[
warn
(
rust_2018_idioms
)
]
#!
[
allow
(
elided_lifetimes_in_paths
)
]
/// A first-in, first-out queue of characters.
pub
struct
Queue
{
older
:
Vec
<
char
>
,
// older elements, eldest last.
younger
:
Vec
<
char
>
// younger elements, youngest last.
}
impl
Queue
{
/// Push a character onto the back of a queue.
pub
fn
push
(
&
mut
self
,
c
:
char
)
{
self
.
younger
.
push
(
c
)
;
}
/// Pop a character off the front of a queue. Return `Some(c)` if there
/// was a character to pop, or `None` if the queue was empty.
pub
fn
pop
(
&
mut
self
)
->
Option
<
char
>
{
if
self
.
older
.
is_empty
(
)
{
if
self
.
younger
.
is_empty
(
)
{
return
None
;
}
// Bring the elements in younger over to older, and put them in
// the promised order.
use
std
::
mem
::
swap
;
swap
(
&
mut
self
.
older
,
&
mut
self
.
younger
)
;
self
.
older
.
reverse
(
)
;
}
// Now older is guaranteed to have something. Vec's pop method
// already returns an Option, so we're set.
self
.
older
.
pop
(
)
}
}
#
[
test
]
fn
test_push_pop
(
)
{
let
mut
q =
Queue
{
older
:
Vec
::
new
(
)
,
younger
:
Vec
::
new
(
)
}
;
q
.
push
(
'0'
)
;
q
.
push
(
'1'
)
;
assert_eq
!
(
q
.
pop
(
)
,
Some
(
'0'
)
)
;
q
.
push
(
'∞'
)
;
assert_eq
!
(
q
.
pop
(
)
,
Some
(
'1'
)
)
;
assert_eq
!
(
q
.
pop
(
)
,
Some
(
'∞'
)
)
;
assert_eq
!
(
q
.
pop
(
)
,
None
)
;
(
&
mut
q
)
.
push
(
'0'
)
;
(
&
mut
q
)
.
push
(
'1'
)
;
assert_eq
!
(
q
.
pop
(
)
,
Some
(
'0'
)
)
;
assert_eq
!
(
q
.
pop
(
)
,
Some
(
'1'
)
)
;
}
impl
Queue
{
pub
fn
is_empty
(
&
self
)
->
bool
{
self
.
older
.
is_empty
(
)
&&
self
.
younger
.
is_empty
(
)
}
}
#
[
test
]
fn
test_is_empty
(
)
{
let
mut
q =
Queue
{
older
:
Vec
::
new
(
)
,
younger
:
Vec
::
new
(
)
}
;
assert
!
(
q
.
is_empty
(
)
)
;
q
.
push
(
'☉'
)
;
assert
!
(
!q
.
is_empty
(
)
)
;
q
.
pop
(
)
;
assert
!
(
q
.
is_empty
(
)
)
;
}
impl
Queue
{
pub
fn
split
(
self
)
->
(
Vec
<
char
>
,
Vec
<
char
>
)
{
(
self
.
older
,
self
.
younger
)
}
}
#
[
test
]
fn
test_split
(
)
{
let
mut
q =
Queue
{
older
:
Vec
::
new
(
)
,
younger
:
Vec
::
new
(
)
}
;
q
.
push
(
'P'
)
;
q
.
push
(
'D'
)
;
assert_eq
!
(
q
.
pop
(
)
,
Some
(
'P'
)
)
;
q
.
push
(
'X'
)
;
let
(
older
,
younger
)
= q
.
split
(
)
;
// q is now uninitialized.
assert_eq
!
(
older
,
vec!
[
'D'
]
)
;
assert_eq
!
(
younger
,
vec!
[
'X'
]
)
;
}
impl
Queue
{
pub
fn
new
(
)
->
Queue
{
Queue
{
older
:
Vec
::
new
(
)
,
younger
:
Vec
::
new
(
)
}
}
}
#
[
test
]
fn
test_new
(
)
{
let
mut
q =
Queue
::
new
(
)
;
q
.
push
(
'*'
)
;
q
.
push
(
'1'
)
;
assert_eq
!
(
q
.
pop
(
)
,
Some
(
'*'
)
)
;
q
.
push
(
'∞'
)
;
assert_eq
!
(
q
.
pop
(
)
,
Some
(
'1'
)
)
;
assert_eq
!
(
q
.
pop
(
)
,
Some
(
'∞'
)
)
;
assert_eq
!
(
q
.
pop
(
)
,
None
)
;
}
Back
|
FazBrowse Home
|
New Git URL