栈与队列相关面试题
来源:互联网 发布:ubuntu 命令 编辑:程序博客网 时间:2024/05/01 00:55
设计包含min函数的栈
#include <iostream>#include <vector>#include <assert.h>using namespace std; template <typename T> class CStackWithMin{public: CStackWithMin(void) {} virtual ~CStackWithMin(void) {} T& top(void); const T& top(void) const; void push(const T& value); void pop(void); const T& min(void) const;private: vector<T> m_data; vector<size_t> m_minIndex;}; template <typename T> T& CStackWithMin<T>::top(void){ return m_data.back();} template <typename T> const T& CStackWithMin<T>::top(void) const{ return m_data.back();}template <typename T> void CStackWithMin<T>::push(const T& value){ m_data.push_back(value); if(m_minIndex.size() == 0) { m_minIndex.push_back(0); } else { if (value < m_data[m_minIndex.back()]) { m_minIndex.push_back(m_data.size()-1); } else { m_minIndex.push_back(m_minIndex.back()); } }} template <typename T> void CStackWithMin<T>::pop(){ m_data.pop_back(); m_minIndex.pop_back();} template <typename T> const T& CStackWithMin<T>::min() const{ assert(m_data.size() > 0); assert(m_minIndex.size() > 0); return m_data[m_minIndex.back()];}
堆栈模拟队列
/* START:: code for queue */typedef struct queue { stack_t s1[1]; /* for in queue */ stack_t s2[1]; /* for out queue */} queue_t;void init_queue(queue_t *q){ init_stack(q->s1); init_stack(q->s2);}void in_queue(queue_t *q, int new){ push(q->s1, new);}int out_queue(queue_t *q){ if (!empty(q->s2)) return pop(q->s2); while (!empty(q->s1)) { int tmp = pop(q->s1); push(q->s2, tmp); } return pop(q->s2);}int q_empty(queue_t *q){ return empty(q->s1) && empty(q->s2);}/* END:: code for queue */
环形队列
/* START:: code for queue */#define QUEUE_SIZE 32int out_queue_err = 0;typedef struct { int data[QUEUE_SIZE]; int inpos; int outpos;} queue_t;void init_queue(queue_t *q){ memset(q->data, 0, sizeof(int) * QUEUE_SIZE); q->inpos = q->outpos = 0;}int in_queue(queue_t *q, int new){ int pos = (q->inpos + 1) % QUEUE_SIZE; if (pos == q->outpos) return -1; q->data[q->inpos] = new; q->inpos = pos; return 0;}int out_queue(queue_t *q) { int ret; if (q->outpos == q->inpos) { out_queue_err = -1; return -1; } ret = q->data[q->outpos]; q->outpos = (q->outpos + 1) % QUEUE_SIZE; return ret;}int empty(queue_t *q){ return q->inpos == q->outpos;}/* END:: code for queue */
队列模拟堆栈
/* START:: code for stack */typedef struct stack { queue_t q[2]; int in;} stack_t;void init_stack(stack_t *s){ init_queue(s->q); init_queue(s->q + 1); s->in = 0;}int push(stack_t *s, int data){ return in_queue(s->q + s->in, data);}int pop(stack_t *s) { int ret, other; if (s->in == 0) other = 1; else other = 0; ret = out_queue(s->q + s->in); while (!empty(s->q + s->in)) { in_queue(s->q + other, ret); ret = out_queue(s->q + s->in); } s->in = other; return ret;}
0 0
- 栈与队列相关面试题
- 栈和队列 相关 面试题
- 栈和队列相关面试题2
- 队列和栈相关面试题总结
- 栈和队列的相关面试题
- 栈和队列相关面试题
- 栈和队列的相关面试题
- 栈和队列相关面试题(1)
- 栈和队列相关面试题(2)
- 栈和队列相关面试题(3)
- 栈和队列相关面试题(1)
- 【程序员面试宝典】栈和队列相关面试题
- 栈、队列面试题
- 栈&&队列面试题
- 常见栈、队列面试题
- 栈和队列面试题
- 栈和队列面试题
- 栈、队列面试题总结
- 阿斯顿发生的发生的发生的
- 使用oozie的注意事项
- Java线程与进程
- T264_param_t, T264_t结构体成员解析
- 只有这样说东地方噶
- 栈与队列相关面试题
- java 图像卷积运算,高斯模糊以及拉普拉斯算子
- 看不见的没地方那地方地方
- 上海珍博文物鉴定中心—科学仪器鉴定原理
- java函数参数传递问题?
- malloc中 heap block 的 blocksize 大小问题
- java 动态代理
- 有没有一种来士大夫
- java中继承概述