⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 delete.java

📁 已经编写好的数据结构课本程序可以减轻您的负担
💻 JAVA
字号:
// =============== Program Description ===============
// 程序名称: delete.java                               
// 程序目的: 设计一个删除链表内的节点的程序。 
// Written By Kuo-Yu Huang. (WANT Studio.)            
// ===================================================
import ConsoleReader.*;				// 导入已定义的数据输入类

public class delete
{	
	public static void main (String args[])
	{
		int Data[][] =			// 输入数据
			{{  1,  3,  5,  7,  2,
			    4,  6,  8,  9, 10},
		  	 { 15, 35, 10, 67, 25,
		  	   65, 38, 70, 30, 20} };
		  
		Node NewList = new Node();	// 产生一个Node类		
		int DataNum;			// 数据的编号
		int DataTotal;			// 数据的总数
		int KeyValue;			// 欲插入位置
		int Header = 0;			// 首节点位置
		int FreeNode;			// 可用节点
		int i;				// 循环计数变量
				
		for ( i=0 ; i<10 ; i++ )
		{
			FreeNode = NewList.FindFree();
			DataNum = Data[0][i];	// 设定数据编号
			DataTotal = Data[1][i];	// 设定数据总数

			NewList.Create(Header,FreeNode,DataNum,DataTotal);
		}
		
		NewList.PrintList(Header);
		System.out.println("Enter 0 to EXIT");
		
		while (true)
		{
			System.out.print("Please input the data number for Insert : ");
						// 读入欲删除位置
			ConsoleReader console = new ConsoleReader(System.in);
			KeyValue = console.readInt();
			if ( KeyValue == 0 )
				break;
						// 调用删除节点
			Header = NewList.Delete(Header,KeyValue);
			NewList.PrintList(Header);
			System.out.println("Enter 0 to EXIT");				
		}
	}
	
}

class Node
{
	int MaxLength = 20;			// 定义链表的最大长度
	int Num[] = new int[MaxLength];	// 链表的数据项
	int Total[] = new int[MaxLength];	// 链表的数据项
	int Next[] = new int[MaxLength];	// 链表的下一个节点位置
	
	public Node ()				// Node构造函数
	{
		for ( int i = 0 ; i < MaxLength ; i++ )
			Next[i] = -2;		// -2表示未用节点
	}
	
// ---------------------------------------------------
// 查找可用节点位置
// ---------------------------------------------------	
	public int FindFree()
	{
		int	i;

		for ( i=0 ; i< MaxLength ; i++ )
			if ( Next[i] == -2 )
				break;
		return i;
	}

// ---------------------------------------------------
// 建立链表
// ---------------------------------------------------		
	public void Create(int Header,int FreeNode,int DataNum,int DataTotal)
	{
		int Pointer;			// 现在的节点位置
	
		if ( Header == FreeNode )	// 新的链表
		{	
			Num[Header] = DataNum;	// 设定数据编号
			Total[Header] = DataTotal;// 设定数据名称
			Next[Header] = -1;	// 将下一个节点的位置,-1表示空节点
		}
		else
		{			
			Pointer = Header;	// 现在的节点为首节点							
			Num[FreeNode] = DataNum;// 设定数据编号
						// 设定数据名称
			Total[FreeNode] = DataTotal;
			Next[FreeNode] = -1;	// 将下一个节点的位置,-1表示空节点
						// 查找链表尾端
			while ( Next[Pointer] != -1)
				Pointer = Next[Pointer];

						// 将新节点串联在原链表尾端
			Next[Pointer] = FreeNode;	
		}
	}

// ---------------------------------------------------
// 打印出链表数据
// ---------------------------------------------------		
	public void PrintList(int Header)
	{
		int	Pointer;
		
		Pointer = Header;
		while ( Pointer != -1 )
		{
			System.out.print("["+Num[Pointer]);
			System.out.print(","+Total[Pointer]+"]");
			Pointer = Next[Pointer];
		}
		System.out.println("");
	}
	
// ---------------------------------------------------
// 删除链表内节点                            
// ---------------------------------------------------
	public int Delete(int Header,int KeyValue)
	{
		int	Pointer;		// 节点声明
		int	Back;			// 节点声明

		Pointer = Header;		// Pointer指针设为首节点

		while ( true )
		{
			if ( Num[Header] == KeyValue ) // 删除首节点
			{
				Header = Next[Pointer];
				Next[Pointer] = -2;
				break;
			}

			Back = Pointer;
			Pointer = Next[Pointer];	// 往下一个节点
			if ( Pointer == -1 )	// 找不到数据
			{
				System.out.println("Not Found!!");
				break;
			}
	
			if ( Num[Pointer] == KeyValue ) // 删除节点在链表中间或尾端
			{
				Next[Back] = Next[Pointer];
				Next[Pointer] = -2;
				break;
			}
		}
		return Header;
	}	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -