【遞迴法求解最大值和最小值】
問題描述:若乙個無序的線性表a[maxsize]採用順序儲存方式,元素型別為整型數。試寫出遞迴演算法求出a中的最大元素和最小元素。
要求: 順序表的資料通過呼叫演算法initrandomize()隨機產生。
遞迴求棧中最大值的核心**如下:
int
recursion_max
(sqstack &s,
int i,
int max)
return
recursion_max
(s,++i,max)
;}
對比看下用冒泡求棧中最大值的實現方式:
int
bubble_max
(sqstack &s)
}}
完整**如下:
#include
#include
#define ok 1
#define error 0
#define overflow -1
#define true 1
#define false 0
#define maxsize 100
typedef
struct stack sqstack;
intinitstack
(sqstack &s)
intpush
(sqstack &s,
int e)
intpop
(sqstack &s,
int&e)
intgethead
(sqstack &s,
int&e)
intempty
(sqstack &s)
intfull
(sqstack s)
#include
void
initrandomize
(int
*arr,
int n,
int min,
int max)
//printf("\n");
}int
bubble_max
(sqstack &s)
//這裡用引用會導致真實s順序變化 }}
intbubble_min
(sqstack &s)
//這裡不用引用會導致真實s順序不改變 }}
intrecursion_max
(sqstack &s,
int i,
int max)
return
recursion_max
(s,++i,max);}
intrecursion_min
(sqstack &s,
int i,
int min)
return
recursion_min
(s,++i,min);}
void
test_bubble
(sqstack s,
int a)
bubble_min
(s);
gethead
(s,e)
;printf
("最小值是%d \n"
,e);
bubble_max
(s);
gethead
(s,e)
;printf
("最大值是%d \n"
,e);
}void
test_recursion
(sqstack s,
int a)
printf
("最大值是%d \n"
,recursion_max
(s,1
,s.data[0]
));printf
("最小值是%d \n"
,recursion_min
(s,1
,s.data[0]
));while(!
empty
(s))
printf
("\n");
}int
main()
while(!
empty
(s))
printf
("\n");
//test_bubble(s,a);
test_recursion
(s,a)
;}
資料結構 遞迴求出最大值
遞迴排序 能用遞迴解決的問題都可以使用非遞迴來完成。時間複雜度 t n a t n b o n d 1 log b,a d 複雜度為o n log b,a 2 log b,a d 複雜度為o n d logn 3 log b,a d 複雜度為o n d 在本題中,將n樣本量分成兩部分,執行兩次因此a...
資料結構 高效獲取最大值的棧和佇列
這道題是在清華大學鄧俊輝老師的資料結構上碰到的,原題如下 描述現有一條單向單車道隧道,每一輛車從隧道的一端駛入,另一端駛出,不允許超車 該隧道對車輛的高度有一定限制,在任意時刻,管理員希望知道此時隧道中最高車輛的高度是多少 現在請你維護這條隧道的車輛進出記錄,並支援查詢最高車輛的功能 輸入第一行僅含...
資料結構 生成視窗最大值陣列
程式設計師 面試指南 左程雲 讀書筆記 7 第一章生成視窗最大值陣列 題目 有乙個整形陣列arr和乙個大小為w的視窗從陣列的最左邊滑到最右邊,視窗每次向右邊滑乙個位置。例如 陣列為 4 3 5 4 3 3 6 7 視窗大小為3時 4 3 5 4 3 3 6 7 視窗最大值為5 4 3 5 4 3 3...