1. 程式人生 > >java資料結構連結串列

java資料結構連結串列

package 演算法.連結串列;
class Data
{

    String key;
    String name;
   int age;


}
class CLType {                //定義連結串列結構
    Data nodedata = new Data();
    CLType nextNode;

    //在連結串列頭新增連結串列頭
    CLType CLAddFirst(CLType head, Data nodedata) {
        CLType node;
        if ((node = new CLType()) == null) {
            System.out.println("申請記憶體失敗");
            return null;
        } else {
            node.nodedata = nodedata;//儲存資料
            node.nextNode = head;//指向資料頭
            head = node;
            return head;
        }
    }


    //在連結串列後面新增資料
    CLType CLAddEnd(CLType head, Data nodedata) {
        CLType node, htemp;                  //首先是要進行分配記憶體
        if ((node = new CLType()) == null) {
            System.out.println("申請記憶體失敗");
            return null;
        } else {
            node.nodedata = nodedata;//儲存資料
            node.nextNode = null;//設定節點引用為空
            if (head == null) {
                head = node;
                return head;
            }
            htemp = head;
            while (htemp.nextNode != null)//連結串列頭非空,向後查詢
            {
                htemp = htemp.nextNode;
            }
            htemp.nextNode = node;
            return head;
        }
    }

    //查詢結點
    CLType CLFind(CLType head, String key) {
        CLType htemp;
        htemp = head;
        while (htemp != null)
            if (htemp.nodedata.key.compareTo(key) == 0) {
                return htemp;
            }
        htemp = htemp.nextNode;
    return null;
    }


    //插入結點
    CLType CLInsert(CLType head, String findkey,Data nodedata)
    {
        CLType node,nodetemp;
        if ((node = new CLType()) == null) {
            System.out.println("申請記憶體失敗");
            return null;
        } node.nodedata = nodedata;//儲存資料
        nodetemp=CLInsert(head,findkey,nodedata);
        if (nodetemp!=null)
        {
            node.nextNode=nodetemp.nextNode;
            nodetemp.nextNode=node;
        }
        else {
            System.out.println("未找到插入位置");
        }
        return head;
    }

//刪除結點
int CLDelete(CLType head, String key)
{
    CLType node,htemp;
    htemp=head;
    node=head;
    while (htemp!=null)
    {
        if (htemp.nodedata.key.compareTo(key)==0){
            node.nextNode=htemp.nextNode;
            htemp=null;
        }
        else {
            node=htemp;
            htemp=htemp.nextNode;
        }

    }
    return 0;
}

//計算連結串列長度
    int CLLength(CLType head)
    {
        CLType htemp;
        int len=0;
        htemp=head;
        while (htemp!=null)
        {
            len++;
            htemp=htemp.nextNode;
        }
        return len;
    }

//顯示所有結點
    CLType CLShow(CLType head)
    {
        CLType htemp,node ;
        Data nodedata;
        htemp=head;
        System.out.println("當前列表共有%d個結點,資料如下\n"+CLLength(head));
        while (htemp!=null)
        {
            nodedata=htemp.nodedata;
            System.out.println("結點(%s%s%d)\n",nodedata.key,nodedata.name,nodedata.age);
            htemp=htemp.nextNode;
        }
        htemp.nextNode=node;
        return head;
    }
}
public class lianbiaoDemo {
    public static void main(String[] args) {
        
    }
}

主函式沒有寫,略掉了