Java学习第37天,十字链表

1,比邻接表难一点点, 毕竟多一个指针域。
2,为控制代码量, 只做了建表和 toString。

package java31to40;

public class D37_OrthogonalList {
	class OrthogonalNode {
		int row;
		int column;
		OrthogonalNode nextOut;
		OrthogonalNode nextIn;

		public OrthogonalNode(int paraRow, int paraColumn) {
			row = paraRow;
			column = paraColumn;
			nextOut = null;
			nextIn = null;
		}
	}

	int numNodes;
	OrthogonalNode[] headers;

	public static void main(String[] args) {
		int[][] tempMatrix = { { 0, 1, 0, 0 }, { 0, 0, 0, 1 }, { 1, 0, 0, 0 }, { 0, 1, 1, 0 } };
		D37_OrthogonalList tempList = new D37_OrthogonalList(tempMatrix);
		System.out.println("数据是:\r\n" + tempList);
	}

	public D37_OrthogonalList(int[][] paraMatrix) {
		numNodes = paraMatrix.length;
		OrthogonalNode tempPreviousNode, tempNode;
		headers = new OrthogonalNode[numNodes];
		for (int i = 0; i < numNodes; i++) {
			headers[i] = new OrthogonalNode(i, -1);
			tempPreviousNode = headers[i];
			for (int j = 0; j < numNodes; j++) {
				if (paraMatrix[i][j] == 0) {
					continue;
				}
				tempNode = new OrthogonalNode(i, j);
				tempPreviousNode.nextOut = tempNode;
				tempPreviousNode = tempNode;
			}
		}
		OrthogonalNode[] tempColumnNodes = new OrthogonalNode[numNodes];
		for (int i = 0; i < numNodes; i++) {
			tempColumnNodes[i] = headers[i];
		}
		for (int i = 0; i < numNodes; i++) {
			tempNode = headers[i].nextOut;
			while (tempNode != null) {
				tempColumnNodes[tempNode.column].nextIn = tempNode;
				tempColumnNodes[tempNode.column] = tempNode;
				tempNode = tempNode.nextOut;
			}
		}
	}

	public String toString() {
		String resultString = "Out arcs: ";

		OrthogonalNode tempNode;
		for (int i = 0; i < numNodes; i++) {
			tempNode = headers[i].nextOut;

			while (tempNode != null) {
				resultString += " (" + tempNode.row + ", " + tempNode.column + ")";
				tempNode = tempNode.nextOut;
			}
			resultString += "\r\n";
		}
		resultString += "\r\nIn arcs: ";

		for (int i = 0; i < numNodes; i++) {
			tempNode = headers[i].nextIn;
			while (tempNode != null) {
				resultString += " (" + tempNode.row + ", " + tempNode.column + ")";
				tempNode = tempNode.nextIn;
			}
			resultString += "\r\n";
		}
		return resultString;
	}
}

结果输出:

数据是:
Out arcs:  (0, 1)
 (1, 3)
 (2, 0)
 (3, 1) (3, 2)
In arcs:  (2, 0)
 (0, 1) (3, 1)
 (3, 2)
 (1, 3)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值