队列的表示
来源:互联网 发布:新东方雅思词汇知乎 编辑:程序博客网 时间:2024/05/22 10:33
(define (make-queue) (cons '() '()))(define (front-ptr queue) (car queue))(define (rear-ptr queue) (cdr queue))(define (empty-queue? queue) (null? (front-ptr queue)))(define (set-front-ptr! queue item) (set-car! queue item))(define (set-rear-ptr! queue item) (set-cdr! queue item))(define (front-queue queue) (if (empty-queue? queue) (error "empty") (car (front-ptr queue))))(define (insert-queue! queue item) (let ((new-pair (list item))) (cond ((empty-queue? queue) (set-front-ptr! queue new-pair) (set-rear-ptr! queue new-pair) queue) (else (set-cdr! (rear-ptr queue) new-pair) (set-rear-ptr! queue new-pair) queue))))(define (delete-queue! queue) (cond ((empty-queue? queue) (error "empty")) (else (set-front-ptr! queue (cdr (front-ptr queue))) queue)));3.23双向链表,注意千万不要对一个链表求值,只能用print打印,因为prev的存在,这里存在环结构(define (make-node item) (list (list item '())))(define (make-deque) (cons '() '()))(define (empty-deque? queue) (null? (front-ptr queue)))(define (front-deque queue) (caar (front-ptr queue)))(define (rear-deque queue) (caar (rear-ptr queue)))(define (set-prev! node prev) (set-car! (cdar node) prev))(define (set-next! node next) (set-cdr! node next))(define (prev-ptr node) (cadar node))(define (front-insert-deque! queue item) (let ((new-node (make-node item))) (cond ((empty-deque? queue) (set-front-ptr! queue new-node) (set-rear-ptr! queue new-node) queue) (else (set-prev! (front-ptr queue) new-node) (set-next! new-node (front-ptr queue)) (set-front-ptr! queue new-node) queue))))(define (rear-insert-deque! queue item) (let ((new-node (make-node item))) (cond ((empty-deque? queue) (set-front-ptr! queue new-node) (set-rear-ptr! queue new-node) queue) (else (set-prev! new-node (rear-ptr queue)) (set-next! (rear-ptr queue) new-node) (set-rear-ptr! queue new-node) queue))))(define (front-delete-deque! queue) (cond ((empty-deque? queue) (error "empty")) (else;此处没有处理尾指针 (set-front-ptr! queue (cdr (front-ptr queue))) queue)))(define (rear-delete-deque! queue) (cond ((empty-deque? queue) (error "empty")) ((eq? (front-ptr queue) (rear-ptr queue)) (set-front-ptr! queue '()) queue) (else (set-next! (prev-ptr (rear-ptr queue)) '()) (set-rear-ptr! queue (prev-ptr (rear-ptr queue))) queue)))(define (print-deque queue) (define (print-iter node) (if (null? node) '() (cons (caar node) (print-iter (cdr node))))) (print-iter (front-ptr queue)))
0 0
- 队列的顺序表示
- 队列的链式表示
- 顺序队列的表示
- 队列的链式表示
- 队列的表示
- 《数据结构》队列的顺序表示--循环队列
- 队列的表示与实现
- 队列的链式表示与实现
- 算法入门之队列的链式表示
- 队列的链式表示和实现
- 队列的顺序表示形式和实现
- 队列的链式表示与实现
- 队列的顺序表示与实现
- 顺序队列的表示和实现
- 链式队列的表示和实现
- 链式队列的表示和实现
- 队列和栈的相互表示
- 单队列的链式表示和实现
- textarea 在浏览器中固定大小和禁止拖动
- c++作业6
- 移动端地图技术分享
- Qt Create 笔记 (一) 1.QString 2.QByteArray
- Yii框架中行为Behavior的概念
- 队列的表示
- 第10,11周 补充 项目一
- C++之动态空间分配与释放:new & delete
- 一个zookeeper命令行工具——zoo_cmd
- linux系统安装jdk8
- C# 串口
- startActivityForResult与startActivity的不同之处
- Java并发编程:volatile关键字解析
- Android - 关于android:fitsSystemWindows="true"的那点事情