題目:設有乙個線性表
(a0, a1, …, an-2, an-1)
存放在單鏈表中。試編寫乙個演算法將該線性表原地逆置,即利用原結點空間置換為
(an-1, an-2, …, a1, a0)
,並分析該演算法的時間複雜度。
1
.需求分析
1) 用單鏈表存放乙個線性表 (a0, a1, …, an-2, an-1) 。
2) 將該線性表原地逆置,即利用原結點空間置換為 (an-1, an-2, …, a1, a0)。
3) 分析演算法的時間複雜度。
2
.概要設計
函式呼叫關係:
adt:
//鍊錶的節點定義
typedef
struct
linknode
nodetype;
3
.詳細設計
//建立鍊錶,使用者輸入節點的data域值,輸入結束
nodetype
*create()
//實現單鏈表的逆置(翻轉)。將頭節點為head的單鏈表逆置
nodetype
* invert(nodetype* head)
p=head
q=head->next;
while(q
不到鍊錶的結尾處)
head->next=null;
head=p;
return
head; }
4
.除錯分析
程式的時間複雜度為
o(n/2)。
5
.使用說明
執行程式,按照提示即可。
注釋和去注釋相應的**,即可完成響應的不同操作。一共有3處。
6
.測試結果
測試組一:
建立單連表,元素型別為
int,以
0結束輸入,不能以0開始
輸入第1個節點值:3
輸入第2
個節點值:4
輸入第3
個節點值:5
輸入第4
個節點值:6
輸入第5
個節點值:7
輸入第6
個節點值:8
輸入第7
個節點值:0
建立的是:從左往右,單鏈表的元素為:
345 678
翻轉之後:從左往右,單鏈表的元素為:
876 543
測試組二:
建立單連表,元素型別為
int,以
0結束輸入,不能以0開始
輸入第1個節點值
:12
輸入第2
個節點值
:34
輸入第3
個節點值
:56
輸入第4
個節點值
:78
輸入第5
個節點值
:90
輸入第6
個節點值:0
建立的是:從左往右,單鏈表的元素為:
123456 7890
翻轉之後:從左往右,單鏈表的元素為:
907856 3412
測試組三:
建立單連表,元素型別為
char,以#
結束輸入
輸入第1個節點值:q
輸入第2
個節點值:#
建立的是:從左往右,單鏈表的元素為:q
只有乙個,沒法翻轉,至少得兩個
翻轉之後:從左往右,單鏈表的元素為:空表
測試組四:
建立單連表,元素型別為
char,以#
結束輸入
輸入第1個節點值:x
輸入第2
個節點值:u
輸入第3
個節點值:e
輸入第4
個節點值:h
輸入第5
個節點值:u
輸入第6
個節點值:i
輸入第7
個節點值:p
輸入第8
個節點值:i
輸入第9
個節點值:n
輸入第10
個節點值:g
輸入第11
個節點值:#
建立的是:從左往右,單鏈表的元素為:
xue huiping
翻轉之後:從左往右,單鏈表的元素為:
gni piuheux
測試組五:
建立單連表,元素型別為
char,以#
結束輸入
輸入第1個節點值
:shu
輸入第2個節點值
:輸入第
3個節點值
:輸入第
4個節點值:#
建立的是:從左往右,單鏈表的元素為:
shu
翻轉之後:從左往右,單鏈表的元素為:
uhs
測試組六:大量資料
翻轉隨機資料
10000016
7
.附錄源程式檔案清單。
資料結構上機作業2
資料結構上機作業2 2.2 include using namespace std template class t class list 2.3 template class t 線性表的元素型別為t class arraylist public list 定義順序表arraylist maxsi...
資料結構作業2版
做到一半就懵了,有bug不想改了 include include include 只做了加減,越想越炸,邊查邊問給搞出來的,懵了已經 typedef struct accacc 字元轉整數 intchrtoint char a,int q,int h res a i 0 t t 10 return ...
資料結構與演算法 作業2
給定乙個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 o 1 額外空間的條件下完成。class solution def removeduplicates self,nums list int in...