栈,队列的相关概念

1.栈

2.队列

栈:一种先进后出的线性数据结构。也是一种特殊的线性表结构,其特殊性在于限定插入和删除数据元素的操作只能在线性表的一端进行。

 1 public class Stack{
 2     private long[] arr;
 3     private int top;
 4
 5     public Stack(){
 6         arr = new long[10];
 7         top = -1;
 8     }
 9     public Stack(int maxSize){
10         arr = new long[maxSize];
11         top = -1;
12     }
13     //insert
14     public void push(int value){
15         arr[++top] = value;
16     }
17     //delete
18     public long pop(){
19         return arr[top--];
20     }
21     //show
22     public long peek(){
23         return arr[top];
24     }
25     //isEmpty
26     public boolean isEmpty(){
27         return top == -1;
28     }
29     //isFull
30     public boolean isFull(){
31         return top == arr.length-1;
32     }
33 }

栈的基本操作

队列:队列(Queue)也是一种运算受限的线性表,它的运算限制与栈不同,是两头都有限制,插入只能在表的一端进行(只进不出),而删除只能在表的另一端进行(只出不进),允许删除的一端称为队尾(rear),允许插入的一端称为队头 (Front),队列的操作原则是先进先出的,所以队列又称作FIFO表(First In First Out)

 1 public class Queue{
 2     private long[] arr;
 3     private int length;
 4     private int front;
 5     private int end;
 6
 7     public Queue(){
 8         arr = new long[10];
 9         length=0;
10         front=0;
11         end=-1;
12     }
13     public Queue(int maxSize){
14         arr = new long[maxSize]
15         length=0;
16         front=0;
17         end=-1;
18     }
19     public void insert(long value){
20         arr[++end] = value;
21         length++;
22     }
23     //循环插入
24     public void insert(long value){
25         if(end = arr.length-1){
26             end = -1;
27         }
28         arr[++end] = value;
29         length++;
30     }
31     public long remove(){
32         length--;
33         return arr[front++];
34     }
35     //循环删除
36     public long remove(){
37         long value = arr[front++];
38         if(front == arr.length-1){
39             front=0;
40         }
41     }
42     public long peek(){
43         return arr[front];
44     }
45     public boolean isEmpty(){
46         return length == 0;
47     }
48     public boolean isFull(){
49         return length == arr.length;
50     }
51 }

队列的基本操作

时间: 2024-12-28 20:07:01

栈,队列的相关概念的相关文章

<数据结构与算法分析 C++描述> 表/栈/队列

这一章主要内容: * 抽象数据类型(ADT)的概念 * 实现表/栈/队列 * 了解这三个数据结构的应用场景 1. ADT ADT: abstract data type, 是抽象的数学模型,在该模型上定义了一系列的操作.使用它的人,不需要了解它的存储方式,只关心它的逻辑特征.可以使用三元组的方法来表示(D,S,P),D是数据对象,S是数据之间的关系,P是对数据的基本操作,具体介绍,可以参考帖子:点击打开链接 2. 表ADT 表的数据自然是单个元素,而元素之间的关系是前驱与后继,操作包括查找/插入

栈&队列的简单实现

栈的定义---Stack 栈只允许在栈的末端进行插入和删除的线性表.栈具有先进后出的特性. 栈可用顺序表实现也可用链表实现. 但: 由于栈只能在末端进行操作,应使用顺序表实现. 用顺序表实现,有如下优点: (1)方便管理 (2)效率高 (3)cpu高速缓冲存取利用率高 实现如下: 测试如下: 队列的定义---Queue 队列只允许在队尾插入,队头删除.具有先进先出的特性. 队列的实现可用顺序表也可用链表. 若采用顺序表,删除时需要移动元素.为了操作方便,采取链表实现. 实现如下: 测试如下: 栈

【C/C++学院】0828-STL入门与简介/STL容器概念/容器迭代器仿函数算法STL概念例子/栈队列双端队列优先队列/数据结构堆的概念/红黑树容器

STL入门与简介 #include<iostream> #include <vector>//容器 #include<array>//数组 #include <algorithm>//算法 using namespace std; //实现一个类模板,专门实现打印的功能 template<class T> //类模板实现了方法 class myvectorprint { public: void operator ()(const T &

C语言栈队列实现二-十/二-八进制转换

C语言栈队列实现二-十/二-八进制转换 2015-04-05 Lover雪儿 1 //利用栈来求取二进制数的十进制与八进制的结果 2 #include <stdio.h> 3 #include <stdlib.h> 4 #include <math.h> 5 6 #define STACK_INIT_SIZE 20 //初始栈大小 7 #define STACK_INCREMENT 10 //扩充栈时每次增加的内存 8 9 typedef char ElemType;

java面向对象的栈 队列 优先级队列的比较

栈 队列 有序队列数据结构的生命周期比那些数据库类型的结构(比如链表,树)要短得多.在程序操作执行期间他们才被创建,通常用他们去执行某项特殊的任务:当完成任务之后,他们就会被销毁.这三个数据结构还有一个特点就是访问是受到限制的,即在特定时刻只有一个数据项可以被读取或者被删除,但是所谓的移除并不是真的删除,数据项依然在这些数据结构中,只不过因为指针已经指向其他数据项,没有办法访问到,当添加新的数据项时,当初移除的数据项被替代从而永远消失. 栈 队列 优先级队列的模拟思想 1.栈:栈遵循先进后出(F

java 集合 Connection 栈 队列 及一些常用

800x600 Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE MicrosoftInternetExplorer4 /* Style Definitions */ table.MsoNormalTable {mso-style-name:普通表格; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-priori

【C++】c++中栈 队列 的应用

C++中提供了STL模板statck 在使用的时候更为方便 除了一般的队列外 还有STL更有双向队列可以使用 #include<deque> 声明:deque <type > name 应用举例1:铁轨问题 Description There is a famous railway station in PopPush City. Country there is incredibly hilly. The station was built in last century. Un

【BZOJ2783】[JLOI2012]树 DFS+栈+队列

[BZOJ2783][JLOI2012]树 Description 在这个问题中,给定一个值S和一棵树.在树的每个节点有一个正整数,问有多少条路径的节点总和达到S.路径中节点的深度必须是升序的.假设节点1是根节点,根的深度是0,它的儿子节点的深度为1.路径不必一定从根节点开始. Input 第一行是两个整数N和S,其中N是树的节点数. 第二行是N个正整数,第i个整数表示节点i的正整数. 接下来的N-1行每行是2个整数x和y,表示y是x的儿子. Output 输出路径节点总和为S的路径数量. Sa

数据结构录 之 链表&amp;栈&amp;队列

三种基本的数据结构,来稍微说一下. 首先链表,这个几乎每本C++的语言书都会说的,直接看书上说的就好. 链表就是一个链,每一个都有一个指针指向下一个,然后这样串了起来.然后可以从头开始找,一直找到尾巴.然后对于某个数据点,都可以删除,只需要让他前面那个指向他后面那个,这样从头开始找的时候就找不到这个点了...在这个点之后添加一个点也是这样,直接让这个点指向那个新的,然后让新的指向原来这个点指向的后一个... 可以想象就是一个个点,然后第一个指向第二个,第二个指向第三个...就像是一条长长的链一样