15道使用頻率極高的基礎演算法題

2021-06-26 04:13:59 字數 2985 閱讀 2662

#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 看到這題第一反應...