剣指offer 4日目
2943 ワード
三日もたたないうちに4日目までがんばった
書く レイアウト 名前
設計テストケース機能テストは基本機能を完成したほか、より多くの機能需要(大数の問題) を考慮する.境界ループおよび再帰的境界が正しいかどうかをテストする 負のテストで可能なエラーの入力 3つのエラー処理方法戻り値 グローバル変数 異常 を投げ出す
面接問題11の数値の整数の次の方はbaseのexponentの次の方を求めて全面的なe=0 e<0 e>0 base=0コードを考慮します
面接問題13チェーンテーブルノードが与えられた単一チェーンテーブルのヘッダポインタとノードポインタを0(1)時間で削除チェーンテーブルノードpを削除する考え方通常はノードを削除するチェーンテーブルを遍歴してpの前のノードkを手に入れ、kがp>nextを指すようにする必要があるが、0(1)時間では遍歴できない.kは取れませんが、pの後のノードを手に入れることができます.pの後のノードsのdataをpに割り当てて、pがs->nextコードを指すようにします.
面接問題14は、奇数が偶数の前に考えられるように配列順序を調整し、2つのポインタを1つ前に後ろに中間に移動させるコードを以下のように設定する.
面接問題15チェーンテーブルの中で最後からk番目のノードは1つのチェーンテーブルとk出力チェーンテーブルの中で最後からk番目のノードの構想を入力します私の構想はチェーンテーブルを遍歴して1つの配列の中で最後から何番目かを取るのが便利です
本の上で考えて2つのポインタをして第1の先にk-1歩それから2つはいっしょに第1の歩いて尾のノードの第2の歩いて最後から第kのノードのコードは以下の通りです
関連するテーマはチェーンテーブルの中間ノードを求めて2つのポインタをして、1つは1回2歩歩いて、1つは1回1歩歩いて、1つは1歩速くて末尾まで歩いて遅いのは中間ノードが単一のチェーンテーブルが1回2歩歩いているかどうかを判断して、1つは1回1歩歩いて、もし歩くのが速くて追いつくのが遅い説明はループ思考があるならば、私たちが1つのポインタでチェーンテーブルを遍歴して問題を解決できない時、2つのポインタでチェーンテーブルを遍歴することを試みることができます.そのうちの1つは歩くのが速くて、あるいは先にいくつか歩いて、もう1つは歩くのが遅くて、あるいは歩くのが遅いです.
第三章高品質のコード
3.2コードの規範性
3.3コードの整合性
設計テストケース
面接問題11の数値の整数の次の方はbaseのexponentの次の方を求めて全面的なe=0 e<0 e>0 base=0コードを考慮します
double PowerEnotMinus(double base,int exponent){
if (exponent==0) return 1;
double result=1.0;
for (int i=1; i<=exponent; i++) {
result *= base;
}
return result;
}
int equal(double num1,double num2){
if (num1 - num2 > -0.0000001 && num1 - num2 < 0.0000001) {
return 1;
}else{
return 0;
}
}
double Power(double base,int exponent){
// 0 0
if (equal(base,0.0)) {
return 0;
}
// 0
if (exponent<0){
double newresult=PowerEnotMinus(base, -exponent);
return 1.0/newresult;
}
return PowerEnotMinus(base, exponent);
}
面接問題13チェーンテーブルノードが与えられた単一チェーンテーブルのヘッダポインタとノードポインタを0(1)時間で削除チェーンテーブルノードpを削除する考え方通常はノードを削除するチェーンテーブルを遍歴してpの前のノードkを手に入れ、kがp>nextを指すようにする必要があるが、0(1)時間では遍歴できない.kは取れませんが、pの後のノードを手に入れることができます.pの後のノードsのdataをpに割り当てて、pがs->nextコードを指すようにします.
struct node * delete(struct node *head,struct node *p){
struct node *s=head;
//
if (p->next==NULL) {
while (s->next!=p) {
s=s->next;
}
s->next=NULL;
return head;
}
//
if (p==head) {
if (head->next) {
head=head->next;
}else{
head=NULL;
}
return head;
}
// p p
p->data= p->next->data;
//p
p=p->next->next;
return head;
}
面接問題14は、奇数が偶数の前に考えられるように配列順序を調整し、2つのポインタを1つ前に後ろに中間に移動させるコードを以下のように設定する.
void qiou(int a[],int n){
int i,j,t,temp;
i=0;
j=n-1;
temp=a[0];
while (i!=j) {
while (i
面接問題15チェーンテーブルの中で最後からk番目のノードは1つのチェーンテーブルとk出力チェーンテーブルの中で最後からk番目のノードの構想を入力します私の構想はチェーンテーブルを遍歴して1つの配列の中で最後から何番目かを取るのが便利です
void lastK(struct node *head,int k){
struct node *p=head;
int a[100];
int i=0;
while (p) {
a[i]=p->data;
i++;
p=p->next;
}
printf(" %d %d",k,a[i-k]);
}
本の上で考えて2つのポインタをして第1の先にk-1歩それから2つはいっしょに第1の歩いて尾のノードの第2の歩いて最後から第kのノードのコードは以下の通りです
void booklastK(struct node *head,int k){
struct node *p1,*p2;
p1=head;
p2=head;
for (int i=0; inext==NULL) {
printf("error");
return;
}
p1=p1->next;
}
while (p1->next!=NULL) {
p1=p1->next;
p2=p2->next;
}
printf(" %d %d",k,p2->data);
}
関連するテーマはチェーンテーブルの中間ノードを求めて2つのポインタをして、1つは1回2歩歩いて、1つは1回1歩歩いて、1つは1歩速くて末尾まで歩いて遅いのは中間ノードが単一のチェーンテーブルが1回2歩歩いているかどうかを判断して、1つは1回1歩歩いて、もし歩くのが速くて追いつくのが遅い説明はループ思考があるならば、私たちが1つのポインタでチェーンテーブルを遍歴して問題を解決できない時、2つのポインタでチェーンテーブルを遍歴することを試みることができます.そのうちの1つは歩くのが速くて、あるいは先にいくつか歩いて、もう1つは歩くのが遅くて、あるいは歩くのが遅いです.