設計算法以判斷集合A是否是集合B的子集

一、題目:

假設遞增有序的帶頭結點的鏈表A、B分別表示一個集合,試設計算法以判斷集合A是否是集合B的子集,如是返回1,否則返回0。

二、思路:

1.A的值大于B的值,那就A的元素不變,B指向下一個元素,再比較;

2.A的值小于B的值,那就A指向下一個元素,B的元素不變,再比較;

3.A的值等于B的值,然后A,B同時指向下一個元素,而且n累加1;(此處的n最后用來與A鏈表的長度比較,若n=A鏈表的長度,則說明A的元素在B中全部都有,即A是B的子集)

三、思路的代碼:

public boolean  gather(Node a,Node b){
        Node A=a.next;          //指向鏈表A的第一個結點
        Node B=b.next;          //指向鏈表B的第一個結點
        int n=0;                //用來計數
        while(A!=null){ 
            while(B!=null){
                if(A.data<B.data){  //如果集合A的數值大于集合B中的數值
                    A=A.next;//A的指針指向下一個元素,B的指針不變,依舊是這個元素
                    break;//終止內循環,從外循環開始,A的在一個元素和B的本元素比較
                }
                if(A.data==B.data){//如果集合A的數值等于集合B中的數值
                    A=A.next;       //A的指針指向下一個元素
                    B=B.next;       //B的指針指向下一個元素
                    n++;            //當n的值等于A集合的元素個數,說明A是B的子集
                    break;
                }
                if(A.data>B.data){  //如果集合A的數值小于集合B的數值
                    B=B.next;//那么B的指針指向下一個元素,A的指針依舊是指向本元素
                    if(A.next==null&&B.next==null){
                        if(A.data==B.data)//A和B均為最后一個元素且相等,則計數
                        n++;
                        A=A.next;   //如果A和B均為最后一個元素不相等,     則A指向空,讓外部循環停止
                    }
                    break;
                }
            }
        }
        if(n==List_Length(a))   //當n的值等于A集合的元素個數,說明A是B的子集
            return true;
        else
            return false;
    }

四、完整程序的輸出結果:

①A為非空集合

A為非空集合

②A為空集合


A為空集
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1 序 2016年6月25日夜,帝都,天下著大雨,拖著行李箱和同學在校門口照了最后一張合照,搬離寢室打車去了提前租...
    RichardJieChen閱讀 5,173評論 0 12
  • 在家里背政治,背一會兒,一扭身,發現奶奶坐著睡著了,哈哈哈,政治不愧是催眠神器,奶奶也受不了啊XD
    是溱溱啊閱讀 258評論 0 0
  • 文|青三盜 當下。 太多的假設。 “要是主政,也會是造福一方的青天” “要是富貴,也會捐款助人積德積善” “要是有...
    青三盜閱讀 281評論 0 0
  • 每天多看了幾分鐘書,跑了幾步路,學到了任何一丁點的新知識,我們都會沾沾自喜。正因為努力看不到,需要日積月累,我們就...
    三個太陽的雨林閱讀 160評論 0 0