本次繼續更新資料結構與演算法這門課的上機實驗,主要涉及鍊錶這一資料結構。實驗內容:一、參考教材,編寫鍊錶的相關程式(定義,初始化,插入,刪除,取值,賦值等等)特此感謝,實驗過程中鄧老師的指導和幫助!
對於想要獲取此實驗報告和源**的同學,歡迎光顧小生寒舍 github:
二、編寫main函式,利用已有函式,構造乙個資料元素值依次為1-50的鍊錶,並逐個輸出,即輸出1,2,3……49,50。
三、編寫函式,將表倒序,並在main函式中呼叫,再次輸出,也就是輸出50,49,48……2,1。(如果需要得到表長,另外編寫函式實現。)
四、說明你的倒序程式的時間複雜度是多少?用o(f(n))表示。
附件:源**
測試環境:win10,dev-c++
#
include
"iostream"
#include
"stdlib.h"
using
namespace std;
#define
elemtype
int#
define
overflow1#
define
status
bool
#define
oktrue
#define
error
false
#definen50
typedef
struct
lnode
lnode,
*linklist;
status init_list
(linklist& l)
//先建立乙個帶頭結點的空單鏈表
status getelem_l
(linklist& l,
int i, elemtype &e)
// 順指標向後查詢,直到p指向第i個元素或p為空if(
!p || j>i )
return error;
// 第 i 個元素不存在
e = p->data;
// 取得第 i 個元素
return ok;
}// getelem_l
status setelem_l
(linklist& l,
int i, elemtype e)
// 順指標向後查詢,直到p指向第i個元素或p為空if(
!p || j>i )
return error;
//第i個元素不存在
p->data=e;
//取得i個元素
cout<<
"good!"
<
return ok;
}// getelem_l
status listinsert_l
(linklist& l,
int i, elemtype e)
//尋找第i-1個結點
if(j
return error;
// i大於表長
linklist s =
(linklist)
malloc
(sizeof
(lnode));
//生成新結點
if( s ==
null
)return error;
s->data = e;
s->next = p->next;
p->next = s;
// 插入l中
return ok;
}// linstinsert_l
status listdelete_l
(linklist& l,
int i, elemtype &e)
//尋找第i個結點,並令p指向其前趨if(
!(p->next)
)return error;
// 刪除位置不合理
linklist q = p->next; p->next = q->next;
//刪除並釋放結點
e = q->data;
free
(q);
return ok;
}// listdelete_l
status list_invert
(linklist& l)
//迴圈結束時,p3指向null,p2指向最後乙個元素
p2->next = p1;
//最後兩個元素倒序
l->next = p2;
//頭結點指向新的鍊錶第乙個元素
機器學習+計算機視覺
資料結構與演算法實驗報告 實驗一 鍊錶
實驗一 鍊錶 實驗目的和要求 1.理解線性表的鏈式儲存結構。2.熟練掌握動態鍊錶結構及有關演算法的設計。根據具體問題的需要,設計出合理的表示資料的鍊錶結構,並設計相關 演算法。實驗任務 1.對任意輸入的一組資料,建立乙個遞增有序的單鏈表。2.將單鏈表 中的奇數項和偶數項結點分解開,並分別連成乙個單鏈...
資料結構與演算法 鍊錶
題目 合併兩個已經排序好的鍊錶 非遞迴和遞迴兩種 方法1 cpp view plain copy print color 000000 合併鍊錶.cpp 定義控制台應用程式的入口點。include stdafx.h include using namespace std struct listnod...
資料結構與演算法 鍊錶
在講述鍊錶之前讓我們對資料結構進行乙個簡單的回顧 我們知道,資料結構指的是描述實際問題中各個資料項節點之間的前後邏輯結構關係,即要麼是線性結構 即某一資料項的前繼節點和後繼節點有且只有乙個 要麼是非線性結構 即某一資料節點的前驅或者後繼節點不止乙個 在確定了實際資料項的資料結構之後,我們要採用某種儲...