資料結構 遞迴法求解棧中最大值和最小值

2021-09-01 06:02:17 字數 2257 閱讀 9598

【遞迴法求解最大值和最小值】

問題描述:若乙個無序的線性表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...