浙大データ構造、尾挿しチェーンテーブルの構築
2248 ワード
6-6末尾挿入による単一チェーンテーブルの作成(C)(25点)
本題では,2つの関数を実現し,n個のデータを入力し,テールプラグ法を用いて単一チェーンテーブルを作成し,印刷することを要求する.例えば、4を入力し、3 7 9 5を入力すると、出力3 7 9 5が印刷されます.
チェーンテーブルノード構造の定義:
関数インタフェースの定義:
ここで、
審判試験プログラムのサンプル:
サンプルを入力:
入力には2行が含まれます.第1の動作データの個数nは、100000を超えない.第2の動作n個のスペースで区切られた整数で、int値の範囲を超えない.
出力サンプル:
1行にチェーンテーブルの各ノードのデータを出力し、スペースで区切りますが、行末に余分なスペースはありません.
本題では,2つの関数を実現し,n個のデータを入力し,テールプラグ法を用いて単一チェーンテーブルを作成し,印刷することを要求する.例えば、4を入力し、3 7 9 5を入力すると、出力3 7 9 5が印刷されます.
チェーンテーブルノード構造の定義:
struct Node { //
int data; //
struct Node* link; //
};
関数インタフェースの定義:
/* : */
struct Node* buildLinkedList(int* arr, int n); /* */
void printLinkedList(struct Node* head); /* */
ここで、
arr
およびn
はユーザが入力したパラメータであり、n
の値は100000を超えない.head
は、単一チェーンテーブルのヘッダポインタである.審判試験プログラムのサンプル:
#include
#include //malloc
struct Node { //
int data; //
struct Node* link; //
};
/* : */
struct Node* buildLinkedList(int* arr, int n); /* */
void printLinkedList(struct Node* head); /* */
int main(int argc, char const *argv[]) {
int n, i;
int* a;
scanf("%d", &n);
a = (int*)malloc(n * sizeof(int)); //
for (i = 0; i < n; ++i) {
scanf("%d", &a[i]);
}
struct Node* head = NULL; // head
// , head
head = buildLinkedList(a, n);
// : head 。
printLinkedList(head);
free(a); //
return 0;
}
/* */
サンプルを入力:
入力には2行が含まれます.第1の動作データの個数nは、100000を超えない.第2の動作n個のスペースで区切られた整数で、int値の範囲を超えない.
4
3 7 9 5
出力サンプル:
1行にチェーンテーブルの各ノードのデータを出力し、スペースで区切りますが、行末に余分なスペースはありません.
3 7 9 5
struct Node * buildLinkedList(int* arr, int n) {
int i;
struct Node *head,*r,*s;
head=(struct Node*)malloc(sizeof(struct Node));
head->link =NULL;
r=head;
for(i=0; idata =arr[i];
r->link=s;
r=s;
}
r->link=NULL;
return head;
}
void printLinkedList(struct Node* head) { //
struct Node *p;
p=head;
p=p->link;
printf("%d",p->data);
p=p->link ;
while(p!=NULL) {
printf(" %d",p->data);
p=p->link ;
}
printf("
");
}