学习笔记:数据结构(二)栈与队列
来源:互联网 发布:储存卡损坏数据恢复 编辑:程序博客网 时间:2024/05/16 19:22
栈与队列可以用双链表来实现。栈就是一个 只允许头插,访问数据只允许访问头节点的下一个节点的双链表;而队列则是一个只允许尾插,访问数据同样只允许访问头节点的下一个节点(也可以实现为,只允许头插,访问数据只许访问头节点的上一个节点)。总之,实现栈的先进后处, 队列的先进先出的特性就可以。
.h文件
#pragma once#include "dlist.h"struct stack {struct dlist *dlist;void (*push)(struct stack *pstack, const void *data, size_t size);int (*pop)(struct stack *pstack, void *dest, size_t size);int (*top)(struct stack *pstack, void *dest, size_t size);int (*is_empty)(struct stack *pstack);};int stack_init(struct stack *pstack);int stack_destroy(struct stack *pstack);下面是.c文件的实现
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <assert.h>#include "stack.h"#include "dlist.h"static void push(struct stack *pstack, const void *data, size_t size){assert(pstack != NULL);assert(data != NULL);pstack->dlist->add(pstack->dlist, data, size);}static int is_empty(struct stack *pstack){return pstack->dlist->is_empty(pstack->dlist);}static int top(struct stack *pstack, void *dest, size_t size){if (is_empty(pstack)) {return -1;}memcpy(dest, pstack->dlist->head->next->data, size);return 0;}static int pop(struct stack *pstack, void *dest, size_t size){if (top(pstack, dest, size) < 0) {return -1;}pstack->dlist->del(pstack->dlist->head->next);return 0;}int stack_init(struct stack *pstack){assert(pstack != NULL);pstack->dlist = (struct dlist *)malloc(sizeof(struct dlist));assert(pstack->dlist != NULL);dlist_init(stack->dlist);pstack->push = push;pstack->pop = pop;pstack->top = top;pstack->is_empty = is_empty;return 0;}int stack_destroy(struct stack *pstack){assert(pstack != NULL);dlist_destroy(pstack->dlist);free(pstack->dlist);return 0;}
队列的实现跟栈的区别就在与push方法的实现的时候,头插换成尾插就可以了.
0 0
- 学习笔记:数据结构(二)栈与队列
- 数据结构学习 栈与队列(二)
- 数据结构复习笔记二:栈与队列
- 学习笔记--数据结构(之二)队列
- 数据结构的学习之路(二)-- 栈与队列
- 【学习笔记----数据结构05-栈与队列】
- 数据结构学习笔记 --- 栈、队列 (习题)
- 数据结构学习笔记 --- 栈、队列 (习题)
- 数据结构笔记(3)栈与队列
- 数据结构与算法学习笔记:栈与队列
- 学习Javascript数据结构与算法系列笔记(二):栈
- 数据结构学习-栈与队列(2)
- 数据结构学习 栈与队列(一)
- 数据结构学习 栈与队列(三)
- 数据结构学习笔记 --- 队列(链队列)
- 数据结构学习笔记 --- 队列(链队列)
- 【黑马程序员-学习笔记】数据结构-栈与队列
- 数据结构学习笔记(5)---静态与动态队列
- 重温位操作
- 笔试 - 高德软件有限公司python试题 及 答案
- linux 下显示隐藏文件夹
- HEVC标准概览
- Java中的可变类和不可变类
- 学习笔记:数据结构(二)栈与队列
- 线程并发库
- 安装全局钩子程序(鼠标钩子)
- 《c++ primer》学习笔记 第四章 数组与指针
- 设计模式1——Abstract Factory模式(C++实现)
- 21天战拖记——Day6:复习阶段性完成!(2014-05-09)
- 交换排序:快速排序
- 如何卸载Chrome应用程序
- 石子合并(区间dp)