#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* 第二周
1. 請在第一週宣告的 data structure 中新增一 data structure pointer 欄位 (additional 4 bytes)
2. 用 malloc + for loop 的方式, 新增 10 個 structure 並串為 list, 10 個 elements 的內容要有所不同
3. 請將此 list 傳入一 function 並印出 list 內容
4. 離開程式前, 請將 malloc 的記憶體 free 掉
*/
struct data {
char name[16];
unsigned long height;
unsigned short weight;
struct data *next;
}stu;
typedef struct data Node;
void show(struct data *stu);
Node *createList(char *arr[], unsigned long *arr1, unsigned short *arr2, int);
Node printList(Node *);
void freeList(Node *);
int main()
{
struct data stu = {"Kerwin", 177, 77};
Node *first;
char *arr[] = {"Ariza", "Bryant", "Clarkson", "Divac", "Ennis", "Fisher", "Gasol", "Horry", "Ingram", "Johnson"};
unsigned long arr1[] = {203, 198, 196, 216, 191, 185, 213, 206, 206, 206};
unsigned short arr2[] = {98, 96, 88, 110, 88, 91, 113, 106, 86, 98};
first = createList(arr, arr1, arr2, 10);
show(&stu);
printList(first);
freeList(first);
return 0;
}
void show(struct data *stu)
{
printf("%8s\t%3d\t%7d\n\n", stu
->name
, stu
->height
, stu
->weight
); }
Node *createList(char *arr[], unsigned long *arr1, unsigned short *arr2, int len)
{
int i;
Node *first = NULL,*current = NULL,*previous = NULL;
for (i=0;i<len;i++){
current
=(Node
*) malloc(sizeof(Node
)); memset(current
, 0, sizeof(Node
)); if (current){
if (i == 0){
first = current;
}else{
previous->next = current;
}
strcpy(current
->name
, arr
[i
]); current->height = arr1[i];
current->weight = arr2[i];
current->next = NULL;
previous = current;
}
}
return first;
}
Node printList(Node *first)
{
Node *data = first;
if (first == NULL){
}else{
while (data != NULL){
printf("%8s\t%3d\t\t%3d\n", data
->name
, data
->height
, data
->weight
); data = data->next;
}
}
}
void freeList(Node *first)
{
Node *current = NULL, *tmp = NULL;
current = first;
while (current != NULL){
tmp = current;
current = current->next;
}
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgoKLyog56ys5LqM5ZGoCgogICAxLiDoq4vlnKjnrKzkuIDpgLHlrqPlkYrnmoQgZGF0YSBzdHJ1Y3R1cmUg5Lit5paw5aKe5LiAIGRhdGEgc3RydWN0dXJlIHBvaW50ZXIg5qyE5L2NIChhZGRpdGlvbmFsIDQgYnl0ZXMpCgogICAyLiDnlKggbWFsbG9jICsgZm9yIGxvb3Ag55qE5pa55byPLCDmlrDlop4gMTAg5YCLIHN0cnVjdHVyZSDkuKbkuLLngrogbGlzdCwgMTAg5YCLIGVsZW1lbnRzIOeahOWFp+WuueimgeacieaJgOS4jeWQjAogICAKICAgMy4g6KuL5bCH5q2kIGxpc3Qg5YKz5YWl5LiAIGZ1bmN0aW9uIOS4puWNsOWHuiBsaXN0IOWFp+WuuQogICAKICAgNC4g6Zui6ZaL56iL5byP5YmNLCDoq4vlsIcgbWFsbG9jIOeahOiomOaGtumrlCBmcmVlIOaOiQogICAKKi8KCnN0cnVjdCBkYXRhIHsKCWNoYXIgbmFtZVsxNl07Cgl1bnNpZ25lZCBsb25nIGhlaWdodDsKCXVuc2lnbmVkIHNob3J0IHdlaWdodDsKCXN0cnVjdCBkYXRhICpuZXh0Owp9c3R1OwoKCnR5cGVkZWYgc3RydWN0IGRhdGEgTm9kZTsKCnZvaWQgc2hvdyhzdHJ1Y3QgZGF0YSAqc3R1KTsKTm9kZSAqY3JlYXRlTGlzdChjaGFyICphcnJbXSwgdW5zaWduZWQgbG9uZyAqYXJyMSwgdW5zaWduZWQgc2hvcnQgKmFycjIsIGludCk7Ck5vZGUgcHJpbnRMaXN0KE5vZGUgKik7CnZvaWQgZnJlZUxpc3QoTm9kZSAqKTsKCmludCBtYWluKCkKewogICAgCglzdHJ1Y3QgZGF0YSBzdHUgPSB7IktlcndpbiIsIDE3NywgNzd9OwoJCglOb2RlICpmaXJzdDsKCWNoYXIgKmFycltdID0geyJBcml6YSIsICJCcnlhbnQiLCAiQ2xhcmtzb24iLCAiRGl2YWMiLCAiRW5uaXMiLCAiRmlzaGVyIiwgIkdhc29sIiwgIkhvcnJ5IiwgIkluZ3JhbSIsICJKb2huc29uIn07Cgl1bnNpZ25lZCBsb25nIGFycjFbXSA9IHsyMDMsIDE5OCwgMTk2LCAyMTYsIDE5MSwgMTg1LCAyMTMsIDIwNiwgMjA2LCAyMDZ9OwoJdW5zaWduZWQgc2hvcnQgYXJyMltdID0gezk4LCA5NiwgODgsIDExMCwgODgsIDkxLCAxMTMsIDEwNiwgODYsIDk4fTsKCQoJZmlyc3QgPSBjcmVhdGVMaXN0KGFyciwgYXJyMSwgYXJyMiwgMTApOwoJCglzaG93KCZzdHUpOwoKCXByaW50TGlzdChmaXJzdCk7CglmcmVlTGlzdChmaXJzdCk7CglzeXN0ZW0oInBhdXNlIik7CglyZXR1cm4gMDsKfQoKCnZvaWQgc2hvdyhzdHJ1Y3QgZGF0YSAqc3R1KQp7CiAgICAgcHJpbnRmKCIlOHNcdCUzZFx0JTdkXG5cbiIsIHN0dS0+bmFtZSwgc3R1LT5oZWlnaHQsIHN0dS0+d2VpZ2h0KTsKfQoKTm9kZSAqY3JlYXRlTGlzdChjaGFyICphcnJbXSwgdW5zaWduZWQgbG9uZyAqYXJyMSwgdW5zaWduZWQgc2hvcnQgKmFycjIsIGludCBsZW4pCnsKCWludCBpOwoJTm9kZSAqZmlyc3QgPSBOVUxMLCpjdXJyZW50ID0gTlVMTCwqcHJldmlvdXMgPSBOVUxMOwoJCglmb3IgKGk9MDtpPGxlbjtpKyspewoJCWN1cnJlbnQ9KE5vZGUgKikgbWFsbG9jKHNpemVvZihOb2RlKSk7CgkJbWVtc2V0KGN1cnJlbnQsIDAsIHNpemVvZihOb2RlKSk7CgkJaWYgKGN1cnJlbnQpewoJCQlpZiAoaSA9PSAwKXsKCQkJCWZpcnN0ID0gY3VycmVudDsKCQkJCQoJCQl9ZWxzZXsKCQkJCXByZXZpb3VzLT5uZXh0ID0gY3VycmVudDsKCQkJfQoJCQoJCXN0cmNweShjdXJyZW50LT5uYW1lLCBhcnJbaV0pOwoJCWN1cnJlbnQtPmhlaWdodCA9IGFycjFbaV07CgkJY3VycmVudC0+d2VpZ2h0ID0gYXJyMltpXTsKCQljdXJyZW50LT5uZXh0ID0gTlVMTDsKCQlwcmV2aW91cyA9IGN1cnJlbnQ7CgkJfQoJfQoJCglyZXR1cm4gZmlyc3Q7Cn0KCk5vZGUgcHJpbnRMaXN0KE5vZGUgKmZpcnN0KQp7CglOb2RlICpkYXRhID0gZmlyc3Q7CglpZiAoZmlyc3QgPT0gTlVMTCl7CgkJcHJpbnRmKCJMaXN0IGlzIGVtcHR5IVxuIik7Cgl9ZWxzZXsKCQl3aGlsZSAoZGF0YSAhPSBOVUxMKXsKCQkJcHJpbnRmKCIlOHNcdCUzZFx0XHQlM2RcbiIsIGRhdGEtPm5hbWUsIGRhdGEtPmhlaWdodCwgZGF0YS0+d2VpZ2h0KTsKCQkJZGF0YSA9IGRhdGEtPm5leHQ7CgkJfQoJCXByaW50ZigiXG4iKTsKCX0KfSAKCnZvaWQgZnJlZUxpc3QoTm9kZSAqZmlyc3QpCnsKCU5vZGUgKmN1cnJlbnQgPSBOVUxMLCAqdG1wID0gTlVMTDsKCWN1cnJlbnQgPSBmaXJzdDsKCXdoaWxlIChjdXJyZW50ICE9IE5VTEwpewoJCXRtcCA9IGN1cnJlbnQ7CgkJY3VycmVudCA9IGN1cnJlbnQtPm5leHQ7CgkJZnJlZSh0bXApOwoJfQp9