数据结构----数组队列和链表的总结和心得
最近一段时间,除了做一个消灭星星的小游戏外(这个在之后的博文中再提到),就一直在学习数据结构方面的知识。
小女纸在大二下学期的时候系统的学习了数据结构。自我感觉数据结构这门专业课还是比较得心应手的。在最近学习Java的过程中,又接触到了数据结构中的数组队列和链表,感觉思路还是比较清晰。下面对数组队列和链表进行总结。
一、数组队列
1.数组的特点:
1)<顺序存储,内存空间中的地址也是连续的
2)可以通过下标方便查找到具体的元素,但是插入和删除元素比较困难
3)长度固定,不可更改
4)类型固定
2.数组的实现方式
1)数据类型[] 数组名=new 数据类型[固定长度]:
2)数据类型[] 数组名=new 数据类型[]{1,2,...}:
3)数据类型[] 数组名:
数组名=new 数据类型[固定长度]
Or 数组名=new 数据类型{1,2,...}:
4)数据类型[] 数组名={1,2,...}:
3.数组队列的主要思想
在一个数组长度为0的数组里,每添加一个数据,就将原来的数组指向一个新建的长度+1的新数组(这个新数组为另外开辟空间的数组。长度为原长+1.)
二、链表
1.链表的特点:
1)内存地址不连续
2)不方便找到具体的元素(依次遍历),但是在指定元素后面插入删除很方便
3)长度不固定,任意增添删除节点
2.链表的实现方式:
1)单链表:一个数据域,一个引用域
2)双链表:一个数据域,两个个引用域(分别指前后)
3)循环链表:一个数据域,两个引用域,首尾节点相连
3.链表的主要思想
通过每个节点的引用很好的找到下一个节点的数据域。添加和删除也只需改变节点引用的指向。
三、数组队列和链表的比较
前面的特点和实现分析我觉得已经很清楚了。
在这里说一点其他的。
1.如果数据经常需要用到添加或删除,最好选择--------链表
2.如果数据长度固定,且经常用到查找操作,那么最好选择---数组队列
个人觉得数组队列的效率非常低,每一次添加数据都会去新建一个新的数组。
但是也不排除数组队列在某些时候非常需要。因此需要综合考虑后再作出选择!
四、数组队列类的Java 代码(只包括添加和获取操作)
public class ArrayQueue {
private Object[] arrayqueue=new Object[0];
private int size=0;
public void add(Object obj) //数组队列中添加结点
{
if(size==0)
{
size++;
arrayqueue=new Object[size];
arrayqueue[0]=obj;
}
size++;
Object[] array=new Object[size];
for(int i=0;i<size-1;i++)
array[i]=arrayqueue[i];
array[size-1]=obj;
arrayqueue=array;
}
public Object get(int index) //获取index位置的对象
{
return arrayqueue[index];
}
public Object remove(int index) //删除index位置的object对象,并且返回该位置对象
{
if(index==size)
{
size--;
}
Object obj=arrayqueue[index];
for(int i=index;i<size-1;i++)
arrayqueue[i]=arrayqueue[i+1];
size--;
return obj;
}
public int getsize() //获取长度
{
return size;
}
}
五、链表类的Java代码实现(包含添加、删除、获取等操作)
public class LinkList {
private Node front;
private Node rear;
private int length=0;
public void add(Object obj) //在链表中添加节点 传进来的是!student对象!
{
Node node=new Node(obj);
if(front==null)
{
front=node;
rear=front;
}
else
{
rear.next=node;
rear=node;
}
length++;
}
public Object get(int index) //获取index位的结点的student对象
{
if(index<0||index>length)
//System.out.println("超出范围");
throw new RuntimeException("超出范围"); //越界的一个异常提示!
Node node=front;
for(int i=0;i<index;i++)
node=node.next;
return node.obj ;
}
public Node getNode(int index)
{
Node node=front;
for(int i=0;i<index;i++)
node=node.next;
return node;
}
public Object remove(int index)
{
if(index<0||index>length)
//System.out.println("超出范围");
throw new RuntimeException("超出范围"); //越界的一个异常提示!
Node node=front;
for(int i=0;i<index-1;i++)
node=node.next;
Node nodetemp=node.next;
node.next=nodetemp.next;
length--;
return nodetemp.obj;
}
public int remove(Object obj) //通过查找数据移除节点。返回删掉的节点的个数count
{
int count=0;
int i=0;
Node node=front;
while(node!=null)
{
Student stu=(Student)node.obj;
Student stu2=(Student)obj;
if(stu.getName().equals(stu2.getName())&&stu.getScore()==stu2.getScore()) //如果相等
{
count++;
if(i==0) //分类处理:与头结点相等,与尾节点相等,中间的。
{
front=node.next;
}
else if(i==length-1){
Node nodetemp=getNode(i-1);
nodetemp.next=null;
}
else{
Node nodetemp=getNode(i-1);
nodetemp.next=getNode(i+1);
}
i--;
length--;
}
node=node.next;
i++;
}
return count;
}
public void input(Object obj,int index) //在index的位置上插入一个节点
{
Node node=new Node(obj);
Node nodetemp=front;
for(int i=0;i<index-1;i++)
nodetemp=nodetemp.next; //得到index-1位置的结点
node.next=nodetemp.next; //在index的位置插入。前后连起来
nodetemp.next=node;
length++;
}
public void modify(int index,Object obj) //修改index位置的数据域为obj
{
Node node=front;
for(int i=0;i<index;i++)
{
node=node.next;
}
node.obj=obj;
}
public void bianli() //遍历每个链表节点的数据,并打印
{
Node node=front;
((Student)(front.obj)).ToString();
for(int i=0;i<length-1;i++)
{
node=node.next;
((Student)(node.obj)).ToString();
}
}
public int getlength() //获取链表的长度
{
return length;
}
}
<!--EndFragment-->
相关推荐
在《数据结构》一书中,作者会详细介绍链表的创建、遍历、插入、删除等操作,以及如何通过链表实现其他高级数据结构,如栈和队列。此外,还会涉及链表的优化,如使用双向链表提高某些操作的效率,或者使用循环链表...
- **数据结构**: 数据结构是指数据的组织方式,常见的数据结构包括数组、链表、栈、队列等。 - **算法**: 算法是一系列解决特定问题的指令集,好的算法能够有效地处理数据和解决问题。 #### 2. 简单类型与复合类型 ...
首先,链表是一种线性数据结构,与数组不同,它的元素在内存中不是连续存储的。每个元素(称为节点)包含两部分:数据和指向下一个节点的引用。这使得链表在插入和删除操作上具有较高的效率,因为它们只需要改变节点...
数据结构是计算机科学的基础,包括数组、链表、栈、队列、树、图等。这些数据结构可以用于社会网络分析系统的实现中,例如使用链表来存储社交网络中的关系,使用树来存储社交网络中的层次结构等。 3. C++编程语言的...
通过这些实验,学生不仅能够掌握各种数据结构(如链表、数组、栈、队列等)的特性,还能学习到如何根据问题选择合适的数据结构,以及如何使用这些数据结构来设计和实现高效算法。实验的过程将理论与实践紧密结合,...
在这个实验报告中,我们关注的是线性表的链表实现,这是一种非常重要的数据结构,广泛应用于各种计算机算法和系统设计中。 链表与数组不同,它不连续存储元素,而是通过每个节点的指针链接相邻的元素。链表包含两种...
数据结构主要包括数组、链表、栈、队列、树(二叉树、平衡树、堆)、图等。这些基本数据结构各有特点,适用于不同的问题场景。例如,数组适合随机访问,链表便于插入和删除,栈和队列则分别用于后进先出(LIFO)和...
队列是一种基础且重要的数据结构,它在计算机科学和编程中扮演着不可或缺的角色。队列遵循“先进先出”(FIFO,First In First Out)的原则,也就是说,最先被添加到队列中的元素也将是最先被处理或移除的元素。这种...
实验的核心内容很可能是基于C++或Java等编程语言实现常见的数据结构,如线性表、栈、队列、链表、树、图以及散列表等。线性表是最基本的数据结构,可以用来存储有序或无序的数据序列。栈是一种后进先出(LIFO)的...
- **队列**:同样是一种线性数据结构,但在两端分别进行插入和删除操作,遵循先进先出(FIFO)原则。 #### 4. **非线性数据结构** - **树**:一种非线性的数据结构,其中的节点具有层级关系。常见的树结构有二叉树...
数据结构是计算机科学中的核心概念,它涉及到如何在内存中有效地组织和管理数据,以便进行高效的操作。在学习数据结构的过程中,我们不仅需要...通过实践和总结心得,我们可以不断深化对数据结构的理解,提升编程能力。
在《B站-青岛大学-王卓老师-数据结构与算法基础》的自学过程中,笔记和心得的整理至关重要,它们可以帮助你巩固所学知识,提高解决问题的能力。ljg_resource1可能是其中的资源文件,可能包含了代码示例、习题解答或...
栈和队列是计算机科学中两个基本的数据结构,它们的基本操作包括进栈、出栈、进队、出队等。栈是一种后进先出的数据结构,即最后一个入栈的元素将是第一个出栈的元素。队列是一种先进先出的数据结构,即第一个入队的...
数据结构中的栈和队列是两种非常基础且重要的抽象数据类型,...实验报告应包括详细的测试数据、实验结果以及算法的时间和空间复杂度分析,同时要求学生总结算法设计的经验和心得,以加深对数据结构的理解和应用能力。
通过对实验过程的反思和总结,贺欣可以更好地掌握数据结构的精髓,为未来的学习和工作打下坚实的基础。 总之,“数据结构实验5”是一个综合性的实践教学环节,通过亲自动手编程和分析,学生能够加深对数据结构的...
在本实验中,我们将深入探讨数据结构中的三个基本概念:栈、队列和串,以及它们在C++中的实现。这些数据结构是计算机科学中处理和组织数据的基础,广泛应用于各种算法和程序设计中。 首先,栈是一种后进先出(LIFO...
同时,记录程序清单、调试过程,分享设计技巧和心得体会,这对于深化理解数据结构的内在逻辑至关重要。 通过这个实验,学生不仅能掌握栈、队列、串的基本操作,还能锻炼C++编程能力,以及问题解决和调试技巧。这...
本复习总结涵盖了数据结构的基础知识,主要针对研究生考研复习,特别是408计算机考研大纲的要求。 首先,第一章绪论讨论了不同类型的存储结构。顺序存储是最简单的形式,元素在内存中连续存放,便于随机访问,但...