# JAVA数据结构（二）

> 来源：梦飞idc云平台 | 原文：https://www.mfisp.com/21945.html | 发布：2023-07-11 | 更新：2023-07-11 | 分类：建站教程

**2.8.单链表上的删除操作算法**

 

public void remove(int i) throws Exception {  
 Node p = head; //初始化p指向头结点，j为计数器  
 int j = -1;  
 while(p.next != null && j < i-1) { //寻找第i个结点的前驱  
 p = p.next;  
 ++j;  
 }  
 if (j > i-1 || p.next == null){  
 throw new Exception("删除位置不合法"); //修改指针，使待删除结点从单链表中脱离出来  
 p.next = p.next.next;  
}

 

**3.3求链栈的长度操作算法**

 

public int length() {  
 Node p = top; //初始化，p指向栈顶元素，length为计数器  
 int length = 0;   
 while (p != null) { //从栈顶元素向后查找，直到p指向空  
 p = p.next; //p指向后继结点  
 ++length; //长度加1  
 }  
 return length;  
}

 

**3.4链栈的入栈操作算法**

 

public void push(Object x) {  
 Node p = new Node(x); //构造一个新结点  
 p.next = top;  
 top = p; //新结点成为当前的栈顶结点  
}

 

**3.5链栈的出栈操作算法**

 

public Object pop() {  
 if (isEmpty()) {  
 return null;  
 }  
 else {  
 Node p = top; //p指向被删结点（栈顶结点）  
 top = top.next; //修改链指针，使栈顶结点从链栈中移去  
 return p.data; //返回栈顶结点的数据域的值  
 }  
}

 

**3.6循环顺序队列的入队操作算法**

 

public void offer(Object x) throws Exception{  
 if ((rear + 1) % queueElem.length == front) //队列满  
 throw new Exception("队列已满"); //抛出异常  
 else {  
 queueElem[rear] = x;  
   
 //x存入rear所指的数组存储位置中，使其成为新的队尾元素  
   
 rear = (rear + 1) % queueElem.length; //修改队尾指针  
}

 

**3.8 链队列的入队操作算法**

 

public void offer(Object x) {  
 Node p = new Node(x); //初始化队列新结点  
 if (front != null){ //队列非空  
 rear.next = p;  
 rear = p; //改变队尾的位置  
 }  
 else  
 front = rear = p;  
}``

---
本页由 梦飞idc云平台（https://www.mfisp.com）提供。站点导航见 https://www.mfisp.com/llms.txt
