#ifndef _algorithm_h_
#define _algorithm_h_
#include /*
1:合併排序,將兩個已經排序的陣列合併成乙個陣列,其中乙個陣列能容下兩個陣列的所有元素;
2:合併兩個單鏈表;
3:倒序列印乙個單鏈表;
4:給定乙個單鏈表的頭指標和乙個指定節點的指標,在o(1)時間刪除該節點;
5:找到鍊錶倒數第k個節點;
6:反轉單鏈表;
7:通過兩個棧實現乙個佇列;
8:二分查詢;
9:快速排序;
10:獲得乙個int型的數中二進位制中1的個數;
11:輸入乙個陣列,實現乙個函式,讓所有奇數都在偶數前面;
12:判斷乙個字串是否是另乙個字串的子串;
13:把乙個int型陣列中的數字拼成乙個串,這個串代表的數字最小;
14:輸入一顆二叉樹,輸出它的映象(每個節點的左右子節點交換位置);
15:輸入兩個鍊錶,找到它們第乙個公共節點;
*///合併排序,將兩個已經排序的陣列合併成乙個陣列,其中乙個陣列能容下兩個陣列的所有元素
void mergearray(int a,int alen,int b,int blen)
else
} while (alen>=0)
while (blen>=0) }
void mergearraytest()
; int b=;
mergearray(a,5,b,5);
for (int i=0;ivaluevalue)
else
nodel* tmpnode=head;
while (head1 && head2)
else
head=head->next;
} if (head1)
if (head2)
return tmpnode;
}void mergelisttest()
nodel* head2=new nodel(2);
cur=head2;
for (int i=4;i<10;i+=2)
nodel* head=mergelist(head1,head2);
while (head) }
//倒序列印乙個單鏈表
void reverseprintnode(nodel* head)
reverseprintnode(head);
}//給定乙個單鏈表的頭指標和乙個指定節點的指標,在o(1)時間刪除該節點
void deletenode(nodel* head,nodel* delnode)
if (delnode->next!=null)//刪除中間節點
else if (head==delnode)//刪除頭結點
else//刪除尾節點,考慮到delnode不在head所在的鍊錶上的情況
if (tmpnode!=null)
}}void deletenodetest()
if (i==k)
} deletenode(head,delnode) ;
} }//找到鍊錶倒數第k個節點
nodel* findkthtotail(nodel* head,unsigned int k)
else
} nodel* knode=head;
while (tmpnode!=null)
return knode;
}void findkthtotailtest()
} nodel* knode=findkthtotail(head,k+3) ;
if (knode)
return reversehead;
}void reverselisttest()
} cur=reverselist( head);
while (cur)
couts1.push(val);
} void pop()
s2.pop();
} t& front()
return s2.top();
} int size()
private:
stacks1;
stacks2;
};void cqueuetest()
while (q.size()>0)
int first=low;
int last=high;
int key=a[first];//用字表的第乙個記錄作為樞軸
while(first=key )--last;
a[first]=a[last];//將比第乙個小的移到低端
while(first=0 && a[j]%2==0)
j--;
if (ileft==null && root->right==null) )
return;
nodet* tmpnode=root->left;
root->left=root->right;
root->right=tmpnode;
treeclass(root->left);
treeclass(root->right);
}void printtree(nodet* root) }
void treeclasstest()
return count;
}nodel* findfirstequalnode(nodel* head1,nodel* head2)
else
for (int i=0;inext;
} while (longnode && shortnode && longnode!=shortnode)
if (longnode)//如果有公共節點,必不為null
return null;
}void findfirstequalnodetest()
else
}#endif
15道使用頻率極高的基礎演算法題
15道常見的基礎演算法題 1 合併排序,將兩個已經排序的陣列合併成乙個陣列,其中乙個陣列能容下兩個陣列的所有元素 2 合併兩個已經排序的單鏈表 3 倒序列印乙個單鏈表 4 給定乙個單鏈表的頭指標和乙個指定節點的指標,在o 1 時間刪除該節點 5 找到鍊錶倒數第k個節點 6 反轉單鏈表 7 通過兩個棧...
15道簡單演算法題
出處 1 合併排序,將兩個已經排序的陣列合併成乙個陣列,其中乙個陣列能容下兩個陣列的所有元素 2 合併兩個單鏈表 3 倒序列印乙個單鏈表 4 給定乙個單鏈表的頭指標和乙個指定節點的指標,在o 1 時間刪除該節點 5 找到鍊錶倒數第k個節點 6 反轉單鏈表 7 通過兩個棧實現乙個佇列 8 二分查詢 9...
2道階乘的演算法題
衝著51nod新ui去做了題,順便總結一下,這裡有2道階乘的題,1003 階乘後面0的數量 n的階乘後面有多少個0?6的階乘 1 2 3 4 5 6 720,720後面有1個0。input 乙個數n 1 n 10 9 output 輸出0的數量input示例 5output示例 1 看到這題第一反應...