3.データ構造チェーン表のチェーンインデックス
5790 ワード
上の二つのブログでは、シングルチェーン表の作成を紹介しました.以下のシングルチェーン表のインデックスを紹介します.
listnode CreatlistTail(listnode* L, int a[], int len) {
listnode* r = L;
for (int i = 0; i < len; i++) {
listnode* trans = new listnode; //
trans->value = 0;
trans->next = NULL; // listnode
trans->value = a[i]; //
r->next = trans; // , ,
r = trans; // r ,
}
return *L;
}
2.以下はシングルチェーンのインデックス関数です.void GetListElem(listnode* L,int index) { //
listnode* transit = L; // , L
int i = 0,answer = 0; //
if (L == NULL) { //
cout << " !";
return;
}
transit = transit->next; //
while (transit != NULL && i <= index) { // , ,
answer = transit->value; //
transit = transit->next; // ,
i++; //
}
if (transit == NULL && i-1 < index) { // while , , , answer,answer
cout << " !" << endl;
}
else {
cout << " : " << answer << endl;
}
}
3.main関数では、循環入力方法を採用して、入力qが終了するまでは、面白いと思って書いていますが、まだ少し不完全なところがあります.でも、これも最善を尽くして完璧なバージョンです.int main() {
int test[5] = { 1,2,3,4,5 };
listnode L_test;
char input = 0;
int num;
L_test = CreatlistTail(&L_test,test,5);
cout << "please enter your index('q' to exit,please enter 0-9):";
while (cin >> input && input != 'q') { // quit
if (input >= '0' && input <= '9') { //
num = input - '0';
GetListElem(&L_test, num);
}
else {
cout << "please enter correctly!" << endl;
cin.ignore(1024,'
'); //
continue;
}
}
cout << "you have quited system" << endl;
system("pause");
return 0;
}
唯一完璧ではないのは、2桁の入力で出力できない「please enter corectly!」入力の先頭を数字と判断するための不正な入力方法が見つかりませんでした.cin.get()もいいかもしれませんが、書き方は複雑になります.