牛客網 選擇題 連結串列 --- 手記1
1、線性表中每一個元素都有一個前驅和一個後繼。 錯誤:第一個元素沒有前驅,最後一個元素沒有後驅。
2、一個長度為100的迴圈連結串列,指標A和指標B都指向了連結串列中的同一個節點,A以步長為1向前移動,B以步長為3向前移動,一共需要同時移動多少步A和B才能再次指向同一個節點____。 50
解析:
(1)因為有100個節點,可以先假設先都在節點1,B經過33步剛剛到達節點100,而A在34,第34步B到達節點3,A在35,所以接下來是3+3n=35+n,所以n=16,所以總共=34+16=50。
(2)請問想著每走一步兩人差距2,總長100,所以是50,這樣也可以麼?
3、一個非空廣義表的表尾() 只能是子表
解析:(1)《資料結構》對廣義表的表頭和表尾是這樣定義的:
如果廣義表LS=(a1,a2…an)非空,則 a1是LS的表頭,其餘元素組成的表(a2,a3,…an)是稱為LS的表尾。
根據定義,非空廣義表的 表頭是一個元素,它 可以是原子也可以是一個子表, 而表尾則必定是子表。例如:LS=(a,b),表頭為a,表尾是(b)而不是b.另外:LS=(a)的表頭為a,表尾為空表().
(2)非空廣義表,除表頭外,其餘元素構成的表稱為表尾,所以非空廣義表尾一定是個表
4、下面有關迴圈單向連結串列,說法正確的有? ac
a 查詢一個節點或者訪問特定編號的節點則需要O(n)的時間
b 每個節點有兩個連線:一個指向前一個節點,而另一個指向後一個節點
c 首節點和末節點被連線在一起
d 判斷連結串列結束的條件是pTail == NULL
解析:
b 單向連結串列,僅有一個連結,指向下一個節點 。
d 因為是迴圈連結串列,判斷的連結串列結束的條件應該是 pTail != head。
迴圈連結串列 始終都是頭節點指向尾節點。
5、迴圈連結串列不是線性表,這樣的說法正確嗎? 不正確
連結串列都是線性資料結構,圖與樹是非線性資料結構。
6、帶頭結點head的單向迴圈連結串列L為空的判斷條件是() head->next==head
7、帶頭結點的單鏈表為空的判定條件是_() head—>next = = NULL
解析:
不論是帶頭結點的連結串列還是不帶頭結點的連結串列,頭指標head都指向連結串列中的第一個結點。如果該連結串列有頭結點,則頭指標head指向頭結點,如果沒有頭結點,則頭指標head指向連結串列的第一個節點。
1 帶頭結點的單鏈表中頭指標head指向頭結點,頭結點的值域不含任何資訊,從頭結點的後繼結點開始儲存資訊。頭指標head始終不等於NULL,head->next等於NULL的時候連結串列為空。
2 不帶頭結點的單鏈表中的頭指標head直接指向開始結點,當head等於NULL的時候連結串列為空。頭結點的存在,使得空連結串列與非空連結串列的處理變得一直,也方便了對連結串列的開始結點插入或刪除操作。
8、將N條長度均為M的有序連結串列進行合併,合併以後的連結串列也保持有序,時間複雜度為()? O(N * M * logN)
解析:
-
在每一個連結串列中取出第一個值,然後把它們放在一個大小為N的數組裡,然後把這個陣列當成heap建成小(大)根堆。此步驟的時間複雜度為O(N)
-
取出堆中的最小值(也是陣列的第一個值), 然後把該最小值所處的連結串列的下一個值放在陣列的第一個位置。如果連結串列中有一個已經為空(元素已經都被取出),則改變heap的大小。此步驟的時間複雜度為O(lg N).
-
不斷的重複步驟二,直到所有的連結串列都為空。
建堆只建一次,複雜度為O(N);調整堆MN-1次,複雜度為(MN-1)O(lg N)。所以為O(MNlg N)
9、關於資料結構的以下說法,錯誤的是 c
a 紅黑樹插入操作的平均時間複雜度為0(log n),最壞時間複雜度為0(log n)
b B+樹插入操作的平均時間複雜度為0(log n),最壞時間複雜度為0(log n)
c Hash插入操作的平均時間複雜度為0(log n),最壞時間複雜度為0(n)
d 排序連結串列插入操作的平均時間複雜度為0(n),最壞時間複雜度為0(n)
10、用常規的非遞迴方法遍歷一個平衡二叉樹,所需的時間複雜度和空間複雜度是?() O(n),O(n)
時間複雜度:分支的數量*每個分支的元素=節點數n
空間複雜度:看棧需要的空間
11、下列敘述中正確的是( ) a
a 演算法的時間複雜度與執行演算法時特定的輸入有關
b 演算法的時間複雜度與演算法程式編制者的水平有關
12、
從第8個那就沒看錯題,看論文相關的東西
https://www.nowcoder.com/test/question/done?tid=19980079&qid=91#summary