Skip to content

Instantly share code, notes, and snippets.

@yao2030
Created December 28, 2012 07:47
Show Gist options
  • Save yao2030/4395578 to your computer and use it in GitHub Desktop.
Save yao2030/4395578 to your computer and use it in GitHub Desktop.
(define (make-queue)
(let ((front-ptr '())
(rear-ptr '()))
(define (set-front-ptr! item)
(set! front-ptr item))
(define (set-rear-ptr! item)
(set! rear-ptr item))
(define (empty-queue?)
(null? front-ptr))
;; (define (print-queue)
;; (let ((a front-ptr)
;; (b rear-ptr))
;; (define (lo)
;; (cond (null? a)
;; '()
;; (else (display (car a))
;; (set! a (cdr a))
;; (lo))))
;; (lo)))
(define (insert-queue! item)
(let ((new-pair (cons item '())))
(cond ((empty-queue?)
(set! front-ptr new-pair)
(set! rear-ptr new-pair))
(else
(set-cdr! rear-ptr new-pair)
(set! rear-ptr new-pair)))))
(define (delete-queue!)
(cond ((empty-queue?)
(error "DELETE! called with an empty queue" queue))
(else
(set! front-ptr (cdr front-ptr)))))
(define (dispatch m)
(cond ((eq? m 'emtpy-queue?) empty-queue?)
((eq? m 'set-front-ptr!) set-front-ptr!)
((eq? m 'set-rear-ptr!) set-rear-ptr!)
((eq? m 'insert-queue!) insert-queue!)
((eq? m 'delete-queue!) delete-queue!)
((eq? m 'print-queue) print-queue)
(else
(error "Undefind operation -- -QUEUE" m))))
dispatch))
(define (set-front-ptr! queue item)
((queue 'set-front-ptr!) item))
(define (set-rear-ptr! queue item)
((queue 'set-rear-ptr!) item))
(define (empty-queue? q)
(q 'empty-queue?))
(define (insert-queue! queue item)
((queue 'insert-queue!) item))
(define (delete-queue! queue)
((queue 'delete-queue!)))
(define (print-queue queue)
((queue 'print-queue)))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment