【数据结构】栈和队列

目录

引入

栈和队列

定义

实现

[1. 数组实现](#1. 数组实现)

[1> 栈](#1> 栈)

2>队列

[2. 链表实现](#2. 链表实现)

[1> 栈](#1> 栈)

[2> 队列](#2> 队列)


引入

什么是数据结构?

是数据在内存当中的存储形式而定。

大数据的查询 -->用数组:数组在内存当中是连续的内存空间。(数组是可以通过下标去获取数据,遍历数据也方便)

增删改 :---->用链表方便:链表在内存空间不连续(数组删除数据会导致内存空间的不连续,就算从前往后覆盖也麻烦)

总结

同样这组数,因为存储形式不同导致的增删改查难易程度不同。

什么是算法?

对数据进行增删改查 等操作就是算法。


栈和队列

定义

什么是栈和队列?

没有确定的数据结构形成的数据结构。

解释:

栈:可以用数组去实现,可以用链表、树、图....

:满足让数据先进后出的特点就是栈。

队列 :只要满足先进先出的就是队列。

实现

1. 数组实现

1> 栈

入栈:

出栈:

出栈的本质就是i--;

java 复制代码
package com.lojarro.栈和队列;

public class StackDemo {
	//首先声明一个数组
	private int[] arr;
	private int i=-1;
	
	public StackDemo(int size) {
		arr=new int[size];
	}
	//入栈的方法
	public void add(int value) {
		//判断数组是否为满
		if(i==arr.length-1) {
			System.out.println("栈已满");
			return ;
		}
		i++;
		arr[i]=value;
	}
	//出栈的方法
	public int get() {
		if(i==-1) {
			System.out.println("栈已空");
			return -1;
		}
		int data=arr[i];
		i--;
		return data;
	}
}
2>队列

只要满足先进先出的就是队列。

入队:

出队:

还有一种情况:

边放边出队情况。

判断队列满不满,看两个指标之间相差是不是数组的长度。

判断队列空,看两个指标指向是否相同。

java 复制代码
package com.lojarro.栈和队列;

import javax.xml.transform.Source;

public class QueueDemo {
	private int arr[];
	private int c=0;
	private int r=0;
	
	public QueueDemo(int size) {
		arr=new int[size];
	}
	
	//数据的添加-入队列
	public void add(int value) {
		//判断是否已满
		if(r-c==arr.length) {
			System.out.println("队列已满");
			return ;
		}
		arr[r%arr.length]=value;
		r++;
	}
	
	public void get() {
		if(c==r) {
			System.out.println("队列空");
			return ;
		}
		System.out.println(arr[c%arr.length]);
		c++;
	}
}

2. 链表实现

1> 栈

只要满足先进后出特点就是。

链表的头插法满足这一特点。

java 复制代码
public class Node {
	public int value;
	public Node next;
	public  Node(int data) {
		value=data;
	}
}
java 复制代码
public class Link {
    Node head=null;
    public void add(int value) {
        Node node=new Node(value);
        if(head==null) {
            head=node;
            return ;
        }
        node.next=head;
        head=node;
    }
    public void get() {
        if(head==null) {
            System.out.println("栈已空");
            return;
        }
        
        System.out.println(head.value);
        head=head.next;
    }
2> 队列
java 复制代码
    public void addQueue(int value) {
        Node node=new Node(value);
        if(head==null) {
            head=node;
            return ;
        }
        Node flag=head;
        while(flag.next!=null) {
            flag=flag.next;
        }
        flag.next=node;
    }
    public void getQueue() {
        if(head==null) {
            System.out.println("队列已空");
            return ;
        }
        System.out.println(head.value);
        head=head.next;
    }
}
相关推荐
刘新明19896 分钟前
Frida辅助分析OLLVM虚假控制流程(下)
java·开发语言·前端
如意猴11 分钟前
双向链表----“双轨联动,高效运行” (第九讲)
数据结构·链表
第二只羽毛28 分钟前
重载和继承的实践
java·开发语言
王嘉俊92533 分钟前
设计模式--适配器模式:优雅解决接口不兼容问题
java·设计模式·适配器模式
王嘉俊92534 分钟前
设计模式--组合模式:统一处理树形结构的优雅设计
java·设计模式·组合模式
道199341 分钟前
50 台小型无人车与50套穿戴终端 5 公里范围内通信组网方案深度研究
java·后端·struts
迎風吹頭髮1 小时前
UNIX下C语言编程与实践35-UNIX 守护进程编写:后台执行、脱离终端、清除掩码与信号处理
java·c语言·unix
光军oi1 小时前
全栈开发杂谈————JAVA微服务全套技术栈详解
java·开发语言·微服务
帮帮志1 小时前
目录【系列文章目录】-(关于帮帮志,关于作者)
java·开发语言·python·链表·交互
聪明的笨猪猪1 小时前
Java Spring “MVC ”面试清单(含超通俗生活案例与深度理解)
java·经验分享·笔记·面试