stack:

1.top and bottom.统一在top端增加和删除。

Attention:

函数 delete(x) 是将top端的元素删除并且赋值给x

实现:通过linked list实现 。

public class StackLi
{ public StackLi( ){ topOfStack = null; }
public boolean isFull( ){ return false; }
public boolean isEmpty( ){ return topOfStack = = null; } public void makeEmpty( ){ topOfStack = null; }
public void push( object x )
public object top( )
public void pop( ) throws Underflow public object topAndPop( )
private ListNode topOfStack; }

通过数组实现。

主要的应用:用于进行括号的匹配  尝试编程中因为之前没有怎么用过stack

主要用到的几个方法: add(x),pop(),firstelement()

 public void testMatch(String expression){matchstack=new Stack<Integer>();int len=expression.length();for(int i=0;i<len;i++){char getCh=expression.charAt(i);if(getCh=='('){matchstack.add(i);                   }else if(getCh==')'){try{matchstack.pop();}catch(Exception e){System.out.println(i+"missing 左括号");}}}while(!matchstack.isEmpty()){System.out.println(matchstack.firstElement()+"missing 右括号");matchstack.pop();}}

表达式:infix expression中缀表达式,也就是我们正常意义上理解的。

posfix expression 后缀表达式 prefix expression 前缀表达式

后缀表达式---->中缀表达式

具体的算法见表达式转换随笔。。

queue:

first in -first out  增加和删除在不同头。

rear增加端  front删除端

数组实现:

删除时有两种方法:

1.直接将头部的坐标修改:front=front+1; O(1) 但是会占用大量的空间

2.将元素将左移动。O(n)

解决1:使用环形的数组。

使用链表实现:摘自别的博客

#include <stdio.h>
#include <stdlib.h>#define Error( str )        FatalError( str )
#define FatalError( str )   fprintf( stderr, "%s\n", str ), exit( 1 )typedef int ElementType;
#define MAXQUEUE 10typedef struct node
{ElementType data;struct node* nextNode;
} Node;
typedef struct queue
{Node* front;    // 对首指针Node* rear;     // 队尾指针int items;      // 队列中项目个数

} *ptrQueue;
typedef ptrQueue Queue;
int IsEmpty(Queue q);
int IsFull(Queue q);
Queue CreateQueue(void);
void DisposeQueue(Queue q);
void MakeEmpty(Queue q);
void Enqueue(ElementType x, Queue q);
ElementType Front(Queue q);
void Dequeue(Queue q);
ElementType FrontAndDequeue(Queue q);/************************************************************************/
// 主程序
/************************************************************************/
int main(void)
{Queue sqQueue;//int maxElements = 10;
    sqQueue = CreateQueue();if (IsEmpty(sqQueue))printf("创建了空队列!");int value = 0;printf("队列中的数据为(front->rear):\n");while (!IsFull(sqQueue)){Enqueue(value*value, sqQueue);  // 入队printf("%d ", value*value);value++;}printf("队列已满\n");ElementType frontQueue;frontQueue = Front(sqQueue);printf("对头元素为:%d\n", frontQueue);Dequeue(sqQueue);frontQueue = Front(sqQueue);printf("执行出队操作Dequeue之后,对头元素是:%d\n", frontQueue);DisposeQueue(sqQueue);return 0;
}/************************************************************************/
// 是否为空
/************************************************************************/
int IsEmpty(Queue q)
{int size=q->items;return size==0;
}/************************************************************************/
// 是否已满
/************************************************************************/
int IsFull(Queue q)
{int size=q->items;return size>=MAXQUEUE;
}/************************************************************************/
// 创建队列
/************************************************************************/
Queue CreateQueue(void)
{Queue q;q=(Queue)malloc(sizeof(struct queue));if(q==NULL){Error("空间不足");}q->front=(Node*)malloc(sizeof(struct node));if(q->front==NULL ){Error("对首失败");}q->rear=(Node*)malloc(sizeof(struct node));if(q->rear==NULL ){Error("对首失败");}q->items=0;return q;
}/************************************************************************/
// 释放队列
/************************************************************************/
void DisposeQueue(Queue q)
{MakeEmpty(q);free(q);
}/************************************************************************/
// 使队列为空
/************************************************************************/
void MakeEmpty(Queue q)
{if (q == NULL)Error("必须先使用CreateQueue创建队列!");while (!IsEmpty(q))Dequeue(q);
}/************************************************************************/
// 入对
/************************************************************************/
void Enqueue(ElementType x, Queue q)
{if (IsFull(q))Error("队列已满!");Node* pnode;pnode = (Node*)malloc(sizeof(Node));if (NULL == pnode)Error("新节点分配内存失败!");pnode->data= x;pnode->nextNode = NULL;if (IsEmpty(q))q->front = pnode;           // 项目位于首端elseq->rear->nextNode = pnode;  // 链接到队列尾端q->rear = pnode;                    // 记录队列尾端的位置q->items++;                     // 项目数加1return;
}/************************************************************************/
// 出对
/************************************************************************/
void Dequeue(Queue q)
{if (IsEmpty(q))Error("队列本身为空!");Node* pnode;pnode = q->front;q->front = q->front->nextNode;free(pnode);q->items--;if (q->items == 0)q->rear = NULL;return;
}/************************************************************************/
//  返回对列头元素
/************************************************************************/
ElementType Front(Queue q)
{if (!IsEmpty(q))return q->front->data;Error("队列为空\n");return 0;
}/************************************************************************/
// 返回对列头元素并使对头元素出对
/************************************************************************/
ElementType FrontAndDequeue(Queue q)
{ElementType x = 0;if( IsEmpty(q) )Error( "队列为空!" );else{q->items--;x = q->front->data;q->front = q->front->nextNode;}return x;
}

应用:

1.打印多米诺

public static void printBinomial(int n){Queue<Integer>queues=new LinkedList();queues.add(1);queues.add(1);int s=0;for(int i=1;i<=n;i++){System.out.println("");for(int j=i;j<=10-i;j++){System.out.print(" ");}queues.add(0);for(int k=1;k<=i+2;k++){int t=queues.poll();queues.add(s+t);s=t;if(k!=i+2){System.out.print(s+" ");}}}}

算法:插入一个0    110 --->1210----->13310----->

2.wire routing

详解参加wire routing

转载于:https://www.cnblogs.com/bounceFront/p/5514714.html

数据接口复习 3 stack and queue相关推荐

  1. stack、queue、priority_queue

    容器适配器 适配器是一种设计模式(设计模式是一套被反复使用的.多数人知晓的.经过分类编目的.代码设计经验的总结),该种模式是将一个类的接口转换成客户希望的另外一个接口. 其中stack和queue都是 ...

  2. C++STL详解(六)——stack和queue

    文章目录 空间适配器 stack stack的定义方式 stack的使用 stack的模拟实现 queue queue的定义方式 queue的使用 queue的模拟实现 浅谈deque容器 deque ...

  3. 6-5-1:STL之stack和queue——stack和queue的快速入门、常用接口以及适配器的概念

    文章目录 一:简单介绍 (1)stack (2)queue 二:stack和queue的应用 三:stack和queue的模拟实现--适配器 一:简单介绍 stack和queue是STL中的两个容器, ...

  4. C++知识点25——使用C++标准库(容器适配器stack、queue、priority_queue)

    除了vector,list,deque等常用的容器,还有根据这些常用的容器进行改造来满足特殊要求的容器,这些特殊容器的行为和常用容器很相近,也称为容器适配器. 常用的容器适配器有三个,分别是stack ...

  5. C++ STL : 模拟实现STL中的容器适配器stack和queue

    目录 什么是容器适配器 stack stack的文档介绍-(来自cplusplus) stack的实现 queue queue的文档介绍-(来自cplusplus) queue的实现 什么是容器适配器 ...

  6. C++中的deque、stack、queue及priority_queue

    C++中的deque.stack.queue及priority_queue 文章目录 C++中的deque.stack.queue及priority_queue 一.deque 二.stack 三.q ...

  7. java中List、Map、Set、Collection、Stack、Queue等的使用

    java中这几个东西是比较常用的,虽然我用的不多,也正是因为用的不多,所以我一直搞不清楚他们之间的具体用法以及相互之间的关系,现在特单独作为一个东西来总结一下. 本文参考一下资料: 1.<jav ...

  8. Stack与queue的底层实现、区别。

    一.stack(栈):先进后出 1.栈是一种只能从表的一端存取数据且遵循 "先进后出" 原则的线性存储结构. 栈的开口端被称为栈顶:相应地,封口端被称为栈底. 向栈中添加元素,此过 ...

  9. C++---容器适配器(stack、queue、priority_queue)

    容器适配器 首先我们要知道容器适配器是干啥的. 我们可以简单的将容器适配器当做一个接口装置.有的电脑上没有数据转接口,但是有usb接口,这是我们没必要重新买一个电脑,我们可以做一个usb数据转接线.而 ...

  10. stack和queue容器

    stack容器 stack是一种先进后出的数据结构,它只有一个出口 栈中只有顶端的元素才可以被外界使用,因此栈不允许有遍历行为 栈可以判断是否为空 empty() 栈可以返回元素个数 size() 入 ...

最新文章

  1. 用Cordova打包Vue-vux项目
  2. 苹果系统修复若干办法
  3. 前端面试instanceof_一起回归一下每日一题这些经典面试题
  4. winform TreeView 节点选择
  5. python中pickle模块的用法_Python中json模块和pickle模块的简单介绍(附示例)
  6. mysql2014授权设置_mysql权限管理(2014-09-15)
  7. c语言多线程_马云都称赞的C语言、C++学习路线!!!!
  8. jQuery 插件写法
  9. FileZilla Server远程管理
  10. 三维点云数据处理软件供技术原理说明_十大点云数据处理技术梳理
  11. python游戏编程入门百度云-《Python游戏编程快速上手》PDF下载|百度云盘
  12. 武汉大学计算机学院推免率,武汉大学保研率
  13. 个人银行账户管理程序(C++)
  14. “云原生”技术公开课第3章:Kubernetes 核心概念
  15. gantt客制化gantt 图标
  16. uni-app使用Hbuilder X如何苹果手机IOS打包、发布、运行
  17. 帆软报表,异常问题汇总
  18. JQuery原理解析
  19. ping命令的几个简单使用
  20. 硬盘的种类、区别、运行原理

热门文章

  1. Visitor Pattern
  2. 芯片国产化进程提速 赶超洋品牌核心技术尚欠火候
  3. 《云数据中心构建实战:核心技术、运维管理、安全与高可用》——2.4 云计算的发展历程与未来趋势...
  4. Android入门(三)Activity-生命周期与启动模式
  5. python-unicode十进制数字转中文
  6. 用PS设计等高线效果的背景图片
  7. 在android 采用 android junit test 测试注意
  8. How Do I? Videos for Devices
  9. 旅游后台管理系列——使用maven tomcat插件启动web工程
  10. [USACO DEC13] 名称记录