1.演算法是對特定的問題求解步驟的一種描述。演算法描述有自然語言、流程圖、偽**(重點掌握)。
2.通過時間複雜度和空間複雜度來評定乙個演算法的優劣。
3.特性:有窮性、確定性、可行性、輸入、輸出。
1.線性表分為順序表和煉表。
2.順序儲存結構的特點在邏輯上相鄰(物理位置相鄰),可實現隨機儲存(快速訪問)。
3.鏈式儲存資料元素存放在一組任意位址的儲存節點,空間效率低,適合隨機的插入和刪除操作。
1.棧:後進先出(lifo),入棧和出棧均在棧頂進行。
2.佇列:先進先出 (fifo),隊頭出隊,隊尾入隊,可訪問隊頭和隊尾元素。
3.棧和佇列操作都受限。
1.串是零或多個字元組成的有限序列,資料元素是乙個字元。
2.串的模式匹配:bf演算法(時間複雜度為 o(m*n)),kmp演算法(時間複雜度為 o(m+n))。
1.計算元素位址,例如a[m][n],求i行j列元素位址,每個元素佔=所佔空間為k。
行優先排列:首位址+(im+j)k
列優先排列:首位址+(in+j)k
括號匹配原則:將遇到的左括號進棧,當左邊一堆左括號時,右邊出現乙個右括號,此右括號與最後乙個左括號匹配。就將棧頂出棧,同理當右括號出現時,我們就要找他左邊的括號,若匹配,則繼續,若匹配失敗,則錯誤。結束後判斷棧是否為空,若棧空,則表明符號配對,若棧非空,則表明符號不配對。
做題目時會發現/與/該左右括號佔兩個字元位置,不好判斷,經思考可解決,若遇到符號為/,該位置為合理位置且下乙個符號為,則進棧兩次,繼續遍歷。若遇到符號為,該位置為合理位置且下乙個符號為/,則出棧兩次,以此解決問題。
#include#include#include#define n 200
#include"stdio.h"
#include"stdlib.h"
using namespace std;
int main()
x = i - 1;
for (i = 0; i < x; i++)
break;
case '*':
if (i + 1 < x && str[i + 1] == '/')
else flag = 1;
}break;
case'}':
if (!p.empty() && p.top() == '
else flag = 1;
break;
case']':
if (!p.empty() && p.top() == '[')
else flag = 1;
break;
case')':
if (!p.empty() && p.top() == '(')
else flag = 1;
break;
default:
break;
} if (flag == 1)
else
break;
} }if (flag == 0)
else cout << "no" << endl << p.top() << "-?";
} return 0;
}···
資料結構 演算法及線性表總結
2.空間複雜度分析 與臨時變數所佔空間有關。3.遞迴演算法時間與空間複雜度 都應該寫出遞推式,通過求解遞推式來獲得時間複雜度和空間複雜度。1.順序表 有隨機訪問特性,但其演算法時間主要花費在刪除和插入元素時元素移動上。2.鍊錶 不需要移動元素,沒有隨機訪問特性,演算法時間主要花費在遍歷元素上。1.一...
資料結構線性表演算法總結及測試
資料結構線性表演算法總結及測試 define maxsize 100 順序表查詢 findelem sqlist l,int e 順序表插入 insertelem sqlist l,int p,int e 順序表刪除元素 deleteelem sqlist l,int p,int e 順序表初始化 ...
資料結構 演算法及線性表的總結
1.線性結構是乙個資料元素的有序關係,掌握線性表的基本運算。2.線性表的順序儲存是使用一塊位址連續的儲存空間,按照線性表中元素的邏輯順序依次存放相應元素。3.線性表的鏈式結構是將線性表中的資料元素存放在一組位址任意的儲存節點,節點之間使用 鏈 進行連線。4.鏈式結構中節點 資料元素 指標。資料元素 ...