线性结构——栈和队列

栈类

 1 public class MyStack<T> {
 2     //栈的大小
 3     private int size;
 4     //存放栈的数组
 5     private Object[] data;
 6
 7     /**
 8      * 无参构造方法,初始化数组大小
 9      */
10     public MyStack() {
11         size = -1;
12         data = new Object[10];
13     }
14
15     /**
16      * 有参构造方法,自定义数组大小
17      */
18     public MyStack(int len) {
19         size = 0;
20         if(len < 0) {
21             len = 5;
22         }
23         data = new Object[len];
24     }
25
26     /**
27      * 出栈
28      * @param t
29      * @return
30      */
31     public boolean push(T t) {
32         if(size == data.length) {
33             return false;
34         }else {
35             data[++size] = t;
36             return true;
37         }
38     }
39
40     /**
41      * 入栈
42      * @return
43      */
44     public T pop() {
45         if(size == data.length) {
46             return null;
47         }else {
48             return (T) data[size--];
49         }
50     }
51
52     /**
53      * 查看栈顶元素
54      * @return
55      */
56     public T peek() {
57         if(size == data.length) {
58             return null;
59         }else {
60             return (T) data[size];
61         }
62     }
63
64     /**
65      * 查看数组大小
66      * @return
67      */
68     public int size() {
69         return size;
70     }
队列类
 1 public class MyQueue<T> {
 2     //存放队列的数组
 3     private Object[] data;
 4
 5     /**
 6      * 无参构造方法,初始化数组大小
 7      */
 8     public MyQueue() {
 9         data = new Object[0];
10     }
11
12     //入队
13     public void add(T t) {
14         // 创建一个新的数组
15         Object[] newArr = new Object[data.length + 1];
16         // 把原数组中的元素复制到新数组中
17         for (int i = 0; i < data.length; i++) {
18             newArr[i] = data[i];
19         }
20         // 把添加的元素放入新数组中
21         newArr[data.length] = t;
22         // 使用新数组替换旧数组
23         data = newArr;
24     }
25
26     //出队
27     public T poll() {
28         //把数组中的第0个元素取出来
29         T element = (T) data[0];
30         //创建一个新的数组
31         Object[] newArr = new Object[data.length - 1];
32         //复制原数组中的元素到新数组中
33         for(int i = 0; i < newArr.length;i++) {
34             newArr[i] = data[i + 1];
35         }
36         //替换数组
37         data=newArr;
38         return element;
39     }
40
41     //判断队列是否为空
42     public boolean isEmpty() {
43         return data.length == 0;
44     }
45
46     /**
47      * 查看数组大小
48      * @return
49      */
50     public int size() {
51         return data.length;
52     }

原文地址:https://www.cnblogs.com/pengao/p/10858339.html

时间: 2024-09-28 14:21:26

线性结构——栈和队列的相关文章

数据结构和算法-数据结构-线性结构-栈和队列

 ################################################## """ 三.线性结构 (1)栈 1.定义:栈是一个数据集合,可以理解为只能在一端进行插入或者删除操作的列表. 2.栈的特点:后进先出(last-in,first-out),简称LTFO表 这种数据结构的特点: 就是像是杯子或者是弹夹,电梯, 存储的时候从底部开始,读取的时候从顶部开始,具备这种特点就是栈 就是后进先出, 存储的时候就可以从顺序表或者链表就可以实现, 只让从一

数据结构 线性结构(数组[列表] ,链表 单链表的增删改查**, 线性结构的应用 队列 栈[函数的调用**]),非线性结构 树

数据结构 参考:http://lupython.gitee.io/ 线性结构 就是能够用一根线串起来的数据结构 数组 (列表) 问:申请数组的前提条件是啥? a[12]?内存需要满足的条件? 答:内存必须有一块连续的内存空间 int a[7] : 声明一个数组,这个数组的数组名是 a, 数组的大小是 7, 数组元素的类型是整型. int a[7] = array(1,2,3,4,5,6,7) 问:如何申请内存? 答:C,C++语言,申请:mallco (28).释放:free(28) 问:int

顺序结构栈与队列之货物货架管理

#include <iostream>#include<string.h> using namespace std; static int n;       //货架(栈)的最大容量 //信息结构体typedef struct /*Inform*/      //可以去掉Inform,在需要在结构体中定义结构体对象(指针)时不能去掉{    string name;    int a;}Inform; //栈的*顺序*结构体typedef struct{    Inform *ba

2 限定性线性表——栈与队列

1 栈与队列     1.1 包含min函数的栈 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数 在该栈中,调用min.push和pop方法 要求时间复杂度均为O(1) 算法思想: 要求时间复杂度均为 O(1),增加辅助空间实现,即增加一个辅助栈存储min值 例如:data 中依次入栈 5, 4, 3, 8, 10, 11, 12, 1, 则 min 中依次入栈 5, 4, 3,no,no, no, no, 1. no 代表此次不如栈,如果入栈的元素小于等于 min 中的栈

线性结构之循环队列实现

#include<stdio.h> #include<malloc.h> #include<stdlib.h> #define maxsize 6 /* 循环队列是采用数组实现,传统的数组解决造成浪费大量内存.改进版既是循环数组来解决. */ typedef struct queue { int *pBase; int front; int rear; }Queue; void DeQueue(Queue *,int *val); void EnQueue(Queue

线性结构栈之链表实现

#include<stdio.h> #include<malloc.h> #include<stdlib.h> //结点数据类型 typedef struct Node { int data; struct Node *next; }NODE,*PNODE; //栈数据类型 typedef struct { PNODE top; int cnt; }Stack; //想想看,为什么栈的数据结构是这样,我是这样思考的,如果你不这样写可以, //那你必须造出一个计数的结点和

线性结构——栈

//函数声明: #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> #define STACK_INIT_MEMORY 100 #define STACK_GROW_MEMORY 10 typedef int ElemType; typedef struct stack { ElemType *esp; ElemType *ebp; int size;                     

数据结构10:栈和队列

数据结构栈(Stack)和队列(Queue)详解 本章讲解了两种特殊的线性表结构——栈和队列.读者要重点理解栈的“先进后出”原则和队列的“先进先出”原则,体会两种特殊的线性表结构的应用场景. 本章内容: 1. 栈(Stack)的概念和应用及C语言实现 2. 数据结构实践项目之进制转换器 3. 括号匹配算法及C语言实现 4. 队列(Queue):“先进先出”的数据结构 5. 数据结构实践项目之变态的停车场管理系统 6. 扑克牌游戏及C语言实现 原文地址:https://www.cnblogs.co

数据结构复习--栈和队列(1)--栈

1.栈和队列简介: 栈和队列是非常重要的两种数据结构,在软件设计中应用很多.栈和队列也是线性结构,线性表,栈和队列这三种数据元素和数据元素间的逻辑完全相同.差别是线性表的操作不受限制,而栈和队列的操作收到限制,栈的操作只能在表的一端进行,队列的插入操作在表的一端进行而其它操作在表的另一端进行,所以把栈和队列称为操作受限的线性表 栈: 栈(Stack)是操作限定在表的尾端进行的线性表.表尾由于要进行插入,删除等操作,所以,它具有特殊含义,把表尾成为栈顶(Top),另一端是固定的,叫栈底(Botto