<div class="iteye-blog-content-contain" style="font-size: 14px"></div>数组、链表、队列
数组
数组的引入:由于重绘的时候要在paint方法中传入画的时候的坐标,这样我们就要用一个东西把我们画的坐标给存下来,这样我们就想到了数组,每个位置存放一个对象,这个对象就是我们画的东西,包括坐标等数据。
数组的定义有两种方法,类型名[] 数组名=new 类型名[数组长度] ;
类型名[] 数组名=new {数据或对象的集合}
数组分两种,1、原始数组,就是c语言中一样的,用来存放数据的;
String [] sa= new String{“wrww”,”3wwerss”,};
对象数组,就是把原始数组中的每个数据换做对象,每个位置都是一个对象。
for( int i=0;i<10;i++){
Student sa=new Student();
Student[i]=sa;
}
队列
队列的引入:我们用数组来存放重绘时候的数据,但是数组有固定长度,而我们画的东西是不确定多少的,这样我们需要一个能改变长度的数组,这就是数组队列了,其实就是一个能自己增加长度的数组。
这样我们可以定义几个方法在方法,在队列中添加一个数据、删除一个数据、获得指定位置的值、、、、。
//定义一个在队列中添加一个对象的方法
public void add(Student ol){
//定义一个是原数组长度加一的数组
Student[] youn=new Student[old.length+1];
//把这个对象放在新数组的最后一个位置
youn[old.length]=ol;
//遍历原来的数组,并且把原数组中的数据依次放在新数组中
for(int t=0;t<old.length;t++){
youn[t]=old[t];
}
//将新数组指向旧数组
old=youn;
}
Private Student[] old=new Student[0];
//定义获得队列的长度的函数
public int size(){
return old.length;
}
//定义一个取得特定位置的对象的方法
public Student getl(int ii){
return old[ii];
}
链表
链表的引入:数组有一个很大的缺点,就是要删除或者插入一个数据时,要移动很多位置的数据,很不方便,这样我们就可以用链表中的指针。
链表就是由一个个节点组成,每个节点有两部分,数据存放的部分跟指针部分,指针指向下一个节点。就像一条链子,把所有数据都串在一起。
root=root.next;我们知道一个节点,就可以通过他的next找到他的下一个节点,这样就把所有的数据串起来了。
链表队列:跟数组雷同,也就是定义一个获得更加灵活的链表,也是实现若干方法。
//定义一个在链表队列中添加一个数据的方法
Public void add(Student st){
LinkNode ll=new LinkNode(st);
//判断头节点是否为空
if(root==Null){
root=ll;
Last=ll;
}
else{
LinkNode tem=new LinkNode();
tem.setData=st;
last.setNext=tem;
Last=tem;
}
}
优化
数组队列的优化
/**
* 保存Point对象的队列
* @author
*
*/
public class PointList<E> {
//当前位置的下表
private int Index = 0;
//数组每次增加多大的长度
private int incre = 50;
//初始化时原始数组的大小
private int ss = 100;
private Object[] srcArr=new Object[ss] ;
//定义不同的构造方法,可以由使用者定义数值
public PointList(int ss, int incre){
This.ss=ss;;
this.incre = incre;
}
public PointList(int ss){
this(ss,50);
}
public PointList(int incre){
this(100,incre);
}
public PointList(){
this(100,50);
}
/**
* 往队列里面加入一个Point对象
* @param p Point对象
*/
public void add(E p){
if(Index < srcArr.length){
srcArr[Index++] = p;
} else {
Object[] destArr = new Object[srcArr.length+incre];
for(int i = 0; i < srcArr.length; i++) {
destArr[i] = srcArr[i];
}
srcArr = destArr;
srcArr[Index++] = p;
}
}
/**
* 取到队列第几个对象
* @param index - 对象是索引
* @return 返回Point对象
*/
public E getPoint(int index){
if(index >= srcArr.length)
return null;
return (E)srcArr[index];
}
/**
* 队列的长度
* @return
*/
public int size() {
return Index;
}
}
//定义p类
public class Point {
public double x;
public double y;
public Point(double x,double y){
this.x = x;
this.y = y;
}
public double getX() {
return x;
}
public void setX(double x) {
this.x = x;
}
public double getY() {
return y;
}
public void setY(double y) {
this.y = y;
}
}
链表转为数组
//定义一个节点类
public class MyNode {
public int Data;
public MyNode next;
}
/*
* 定义一个将链表转化为数组的方法
*/
public class Test {
//定义一个得到一个链表的方法
public MyNode getl(){
MyNode tem=new MyNode();
MyNode tem3 ;
tem3=tem;
for(int k=1;k<5;k++){
MyNode tem4=new MyNode();
java.util.Random ran=new java.util.Random();
tem4.Data=ran.nextInt(1000);
tem3.next=tem4;
tem3=tem3.next;
}
return tem;
}
//传入一个链表,并且把链表转化为数组,并且返回一个数组
public int[] Gets(MyNode root){
int[] sa = new int[5];
// MyNode root1=new MyNode();
if(root!=null)
for(int i=0;i<sa.length;i++){
sa[i]=root.Data;
root=root.next;
}
return sa;
}
//定义一个打印数组的方法
public void printl(int[] sa){
for(int j=0;j<sa.length;j++){
System.out.println(sa[j]);
}
}
/**把一个字符串链表转化为字符串数组
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//实例化一个对象
Test ss=new Test();
MyNode tem1=ss.getl();
int[] ssa=ss.Gets(tem1);
ss.printl(ssa);
}
}
分享到:
相关推荐
本话题主要探讨了两种常用的数据结构——数组和链表——在实现队列这一线性数据结构时的应用。队列是一种先进先出(First In First Out, FIFO)的数据结构,它的主要操作包括入队(enqueue)、出队(dequeue)以及...
数组、链表、队列、栈的区别和联系 在数据结构中,数组、链表、队列、栈是四种常用的数据结构,它们之间有着紧密的联系,但同时也存在着许多区别。本文将详细介绍数组、链表、队列、栈的区别和联系。 一、数组和...
在队列的代码中,引用了链表的代码
数组、链表、队列、栈数据结构特点,各自优点和缺点 在计算机科学中,数据结构是指用于组织和存储数据的方式。常见的数据结构包括数组、链表、队列、栈等。每种数据结构都有其特点、优点和缺点,本文将对这些数据...
### 循环链表队列与循环数组队列的代码实现解析 在计算机科学中,队列是一种重要的数据结构,遵循先进先出(FIFO)原则。队列可以使用多种方式实现,包括链表和数组。本文将深入探讨两种队列实现方式:循环链表队列...
"go语言通过数组和链表的方式实现队列" 从给定的文件信息中,我们可以生成以下知识点: 1.队列的定义:队列是一种特殊的线性表,只能在队列的尾部添加元素,在队列的头部删除元素,先进先出(FIFO)。 2.go语言中...
本篇文章将深入探讨如何用数组和链表两种数据结构来实现队列。 ### 数组实现队列 数组实现队列的优势在于访问速度快,因为数组是连续存储的,可以通过下标直接访问元素。但数组的大小是固定的,所以在创建时需要...
虽然题目要求分析链表队列的实现,但给定的代码片段实际上是实现了基于数组的优先队列,而不是链表队列。这里简单分析一下这段代码的主要部分: #### 1. 基础函数定义 - `FixUp`: 调整堆使之满足大顶堆的性质。 - ...
完整代码 正确产生结果 三个类分开写 class linklist { protected: struct node { int data; node *next; }; node *head; int length; public:
C语言数据结构链表队列的实现 1.写在前面 队列是一种和栈相反的,遵循先进先出原则的线性表。 本代码是严蔚敏教授的数据结构书上面的伪代码的C语言实现代码。 分解代码没有包含在内的代码如下: #include #...
- 队列:一种先进先出(FIFO)的数据结构,适用于任务调度等场景。 - 链表:如单向链表、双向链表和循环链表等。 - 栈:一种后进先出(LIFO)的数据结构,用于表达式求值、函数调用栈等。 #### 二、非线性结构 ...
- **链表的优势**:适合需要频繁进行插入和删除操作的应用场景,如任务队列管理等。 - **链表的劣势**:查询效率低,不适合需要频繁查询数据的场景。 #### 关于顺序表的改进 对于基于数组的顺序表,可以通过引入...
这种基于数组的队列虽然在空间效率上比链表实现的队列更优,但在动态扩展时可能涉及数组复制,性能相对较差。 在实际应用中,我们需要根据具体需求选择合适的数据结构。例如,对于大量并发插入和删除的操作,`...
* 链式存储结构:使用链表来存储队列的元素,不在本文中讨论。 3. 队列的实现: * 构造函数(MyQueue):初始化队列,分配内存空间。 * 析构函数(~MyQueue):释放队列占用的内存空间。 * 将队列置空...
数组、链表、堆栈和队列、线性表和顺序表 数组、链表、堆栈和队列是最基本的数据结构,任何程序都会涉及到其中的一种或多种。数据结构是指数据之间的相互关系,即组织形式,有逻辑结构和物理结构之分。逻辑结构有...
常见的数据结构(栈、队列、数组、链表和红黑树) 数组和链表.pdf
数据结构学习代码,内容包括:稀疏数组、队列、链表、栈、递归的使用、排序算法、查找算法、哈希表、树结构_DataStructure
队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,只允许在表的后端(rear)进行插入操作,下面介绍一下java使用数组和链表实现队列的示例