Stack 栈 ----Queue 队列

 一、概念

栈 Stack 先进后出的结构,队列 Queue 先进先出的结构 如图:

二 、 实现

实现如上两个数据结构。 首先动手之前,Framework Design Guidelines这本书告述我们,在设计API或者实现类的时候,应当围绕场景编写API规格说明书。

1.1 实现栈

     对于栈提供

Stack<T>         :    创建一个 栈

void Push(T s)  :   插入一个元素

T Pop ()           :   推出最上的元素,删除并且返回这个元素

T PopFirst()     :    返回最上面的元素,不删除

void Clear()     :    清空栈元素

int  Count        :    返回栈元素个数

bool IsEmpty() :     是否为空

使用链表实现:

时间: 2024-10-12 23:54:34

Stack 栈 ----Queue 队列的相关文章

[笔记]python数据结构之线性表:linkedlist链表,stack栈,queue队列

python数据结构之线性表 python内置了很多高级数据结构,list,dict,tuple,string,set等,在使用的时候十分舒心.但是,如果从一个初学者的角度利用python学习数据结构时,这些高级的数据结构可能给我们以迷惑. 比如,使用list实现queue的时候,入队操作append()时间复杂度可以认为是O(1),但是,出队操作pop(0)的时间复杂度就是O(n). 如果是想利用python学学数据结构的话,我觉得还是自己实现一遍基本的数据结构为好. 1.链表 在这里,我想使

检索 04 --Stack栈 Queue队列 Hashtable哈希表

//Stack 先进后出 没有索引 Stack st = new Stack(); st.Push(12); st.Push(11); st.Push(22); st.Push(34); st.Push(56);//从栈顶部插入 56应该在栈的最上部 Console.WriteLine(st.Peek());//st.Peek(); 返回栈的顶部数据 但是不移除 56 Console.WriteLine(st.Pop());//st.Pop(); 移除并返回栈的顶部数据值 56 object[]

手工 stack栈 queue队列 priority queue 优先队列 模板

栈stack: 1 struct sta 2 { 3 int sz[100001]; 4 int top() 5 { 6 return sz[top]; 7 } 8 void push(int x){ 9 sz[++top]=x; 10 } 11 void pop(){ 12 if(top>0) 13 top--; 14 } 15 void cl() 16 { 17 top=0; 18 } 19 int size(){ 20 return top; 21 } 22 }stack;

python实现stack(栈)和队列(queue)

栈和队列是两种基本的数据结构,同为容器类型.两者根本的区别在于: stack:后进先出 queue:先进先出 stack和queue是没有查询具体某一个位置的元素的操作的.但是他们的排列是按顺序的 对于stack我们可以使用python内置的list实现,因为list是属于线性数组,在末尾插入和删除一个元素所使用的时间都是O(1),这非常符合stack的要求.当然,我们也可以使用链表来实现. stack的实现代码(使用python内置的list),实现起来是非常的简单,就是list的一些常用操作

Stack集合 Queue队列集合 Hashtable哈希表

Stack集合 干草堆集合 栈集合 栈;stack,先进后出,一个一个赋值,一个一个取值,安装顺序来. 属性和方法 实例化 初始化 Stack st = new Stack(); 添加元素 1 个数 2 Console.WriteLine(st.Count); 3 只要使用一次pop方法,就会从最后一个元素开始排除 弹出 4 Console.WriteLine(st.Pop()); 5 Console.WriteLine(st.Count); 6 只想查看不弹出 7 Console.WriteL

栈和队列(2)

一.题目:仅用递归函数和栈操作逆序一个栈 将一个栈里面的元素逆序,只能用递归函数来实现,不能用其他数据结构. 只能用递归函数来实现 可以使用现成的栈类型 思路: 为了将栈逆序,只需要按顺序将栈顶至栈底的元素拿出并移除,放置到栈顶中,这样就可以将栈逆序. 两个递归函数: 一个将栈底元素取出. 一个将剩下的栈元素逆序. 如: 输入栈{1, 2, 3, 4, 5},1在栈顶.颠倒之后的栈为{5, 4, 3, 2, 1},5处在栈顶. // 我们再来考虑怎么递归.我们把栈{1, 2, 3, 4, 5}看

Coursera Algorithms week2 栈和队列 Interview Questions: Queue with two stacks

题目原文: Implement a queue with two stacks so that each queue operations takes a constant amortized number of stack operations. 题目要求用栈实现队列的所有操作. 1 import java.util.Iterator; 2 import edu.princeton.cs.algs4.Stack; 3 public class QueueWith2Stacks<Item>{

lintcode 中等题:implement queue by two stacks 用栈实现队列

题目 用栈实现队列 正如标题所述,你需要使用两个栈来实现队列的一些操作. 队列应支持push(element),pop() 和 top(),其中pop是弹出队列中的第一个(最前面的)元素. pop和top方法都应该返回第一个元素的值. 样例 比如push(1), pop(), push(2), push(3), top(), pop(),你应该返回1,2和2 挑战 仅使用两个栈来实现它,不使用任何其他数据结构,push,pop 和 top的复杂度都应该是均摊O(1)的 解题 两个栈stack1

C# 编程中的堆栈(Stack)和队列(Queue)

一.什么是堆?(Heap)      堆是无序的,是一片不连续的内存域,由用户自己来控制和释放,如果用户自己不释放的话,当内存达到一定的特定值时,通过垃圾回收器(GC)来回收.      是程序运行期间动态分配的内存空间,你可以根据程序的运行情况确定要分配的堆内存的大小. 二.什么是栈?(Stack)      栈是有顺序的,是一片连续的内存域,保持着先进后出的原则,由系统自动分配和维护.      是编译期间就分配好的内存空间,因此代码中必须就栈的大小有明确的定义.      表尾允许进行插入