定義兩個棧,stack1儲存數字,stack2儲存運算子。
掃瞄中綴表示式:
(1)若為數字則進棧stack1
(2)若為運算子『(』直接進棧stack2;
若為運算子『)』則將棧裡的運算子乙個個出棧,彈出stack1的兩個數字進行運算結果再入stack1,直到遇到『(』並將其刪除;
若為其他運算子,彈出stack2中所有的優先順序大於等於該運算子的運算子進行運算
掃瞄結束,stack1中的乙個數就是結果。
d結點的度左子樹與右子樹的高度差為該結點的平衡因子。
結點的子女數目稱為結點的度。樹的度是所有結點度之和
a子圖(邊集合頂點集都是原圖的子集)、生成子圖(邊集是子集、頂點集與原圖相同)
極大連通子圖,極大即要求連通又要包含最多的邊;極小連通子圖既要保持圖連通又要使得邊數最少。
無向圖中的極大連通子圖稱為連通分量。
連通圖的生成樹是包含圖中全部頂點的乙個極小連通子圖。
a解答:1)演算法的基本設計思想:
單鏈表逆序存放大整數的各個數字,即先存低位再存高位,而加法運算順序也是低位到高位。模擬加法運算,設定變數carry儲存低位進製,,設定鍊錶result儲存運算結果。順序從兩鍊錶第乙個儲存數字的結點開始運算。將鍊錶p和q對應結點儲存的數字以及carry相加,結果取余為該位相加結果,結果除10為該位進製。若某一鍊錶之後沒有結點了表示對應位數字為0,直至兩個鍊錶的所有結點數字均計算完畢,若最高位有進製,則需再新增乙個結點儲存該位。
2)
typedef struct lnodelnode;
void addlargeint(lnode *p,lnode *q,lnode *& result)
if(tempq!=null)tempp=tempq;
while(tempp!=null)
if(carry>0)
}
3)時間複雜度為o(max(m,n)),其中m,n分別為兩操作鍊錶長度。
空間複雜度為o(max(m,n)),其中m,n分別為兩操作鍊錶長度。
btnode * getparent(btnode *t,btnode *p)
時間複雜度為o(n),n為二叉樹的結數 排序演算法(天勤資料結構高分筆記)
排序演算法 直接插入排序演算法 每趟將乙個待排序的關鍵字按照其值的大小插入到已經排好的部分有序序列的適當位置上,直到所有待排關鍵字都被插入到有序序列中為止 void insertsort int r,int n 代拍關鍵字儲存在r中,預設為整形,個數為n r j 1 temp 找到插入位置,將tem...
天勤考研資料結構 單鏈表操作
定義單鏈表 typedef struct lnodelnode a b皆為有序鍊錶,合併排序到c中 頭插法 void merge lnode a,lnode b,lnode c else if q next null if p null if p next null if q null a b皆為有...
天勤考研資料結構 雙鏈表操作
定義雙鏈表的結構體型別 typedef struct dlnodedlnode 採用尾插法建立雙鏈表 int finddelmerge dlnode a,int a,int n p next null 查詢結點的演算法 成功返回結點指標,失敗返回null 注意函式的返回值型別 dlnode find...