File tree 1 file changed +37
-0
lines changed
1 file changed +37
-0
lines changed Original file line number Diff line number Diff line change
1
+ (define (make-queue )
2
+ (let ((front-ptr '() )
3
+ (rear-ptr '() ))
4
+ (define (dispatch m )
5
+ (cond ((eq? m 'front-ptr ) front-ptr)
6
+ ((eq? m 'rear-ptr ) rear-ptr)
7
+ ((eq? m 'set-front-ptr! ) (lambda (v ) (set! front-ptr v)))
8
+ ((eq? m 'set-rear-ptr! ) (lambda (v ) (set! rear-ptr v)))
9
+ ((eq? m 'empty-queue? ) (null? front-ptr))
10
+ ((eq? m 'front-queue ) (if (null? front-ptr)
11
+ (error " FRONT called with an empty queue" )
12
+ (car front-ptr)))
13
+ ((eq? m 'insert-queue! ) (lambda (item )
14
+ (let ((new-pair (cons item '() )))
15
+ (cond ((null? front-ptr)
16
+ (set! front-ptr new-pair)
17
+ (set! rear-ptr new-pair)
18
+ front-ptr)
19
+ (else
20
+ (set-cdr! rear-ptr new-pair)
21
+ (set! rear-ptr new-pair)
22
+ front-ptr)))))
23
+ ((eq? m 'delete-queue! ) (cond ((null? front-ptr)
24
+ (error " DELETE! called with empty queue" ))
25
+ (else
26
+ (set! front-ptr (cdr front-ptr))
27
+ front-ptr)))))
28
+ dispatch))
29
+
30
+ (define (front-ptr queue ) (queue 'front-ptr ))
31
+ (define (rear-ptr queue ) (queue 'rear-ptr ))
32
+ (define (set-front-ptr! queue v ) ((queue 'set-front-ptr! ) v))
33
+ (define (set-rear-ptr! queue v ) ((queue 'set-rear-ptr! ) v))
34
+ (define (empty-queue? queue ) (queue 'empty-queue? ))
35
+ (define (front-queue queue ) (queue 'front-queue ))
36
+ (define (insert-queue! queue item ) ((queue 'insert-queue! ) item))
37
+ (define (delete-queue! queue ) (queue 'delete-queue! ))
You can’t perform that action at this time.
0 commit comments