#include <stdio.h> #include <stdlib.h> #include <string.h> #define NAME_SIZE 15 // 記錄好友資料的結構 struct friendData { char name[NAME_SIZE]; int age; int sex; int relation; }; // 暫存在記憶體中的資料結構:鏈結串列 struct linkedListNode { struct friendData data; struct linkedListNode *nextPtr; }; typedef struct linkedListNode LinkedListNode; void addfriend(LinkedListNode *startPtr); void printList2(LinkedListNode *startPtr); int main(void) { LinkedListNode *startPtr = NULL; int i; printf("\n%p\n\n", startPtr); i = 0; startPtr = NULL; while (i < 5) { addfriend(startPtr); i++; } printList2(startPtr); printf("\n%p\n\n", startPtr); return 0; } void addfriend(LinkedListNode *startPtr) { LinkedListNode *newPtr, *currentPtr; char fname[NAME_SIZE]; int fage, fsex, frelation; // 向作業系統要求新的記憶體空間 newPtr = malloc(sizeof(LinkedListNode)); // 依序輸入好友資料 printf("\n好友暱稱: "); scanf("%s", fname); printf("好友年齡: "); scanf("%d", &fage); printf("好友性別 - 0.女 1.男: "); scanf("%d", &fsex); printf("好友關係 - 0.家人 1.同學 2.朋友: "); scanf("%d", &frelation); // 將好友資料拷貝到剛才取得的記憶體空間之中 strcpy(newPtr->data.name, fname); newPtr->data.age = fage; newPtr->data.sex = fsex; newPtr->data.relation = frelation; newPtr->nextPtr = NULL; // 將資料加入鏈結串列 if (startPtr == NULL) { startPtr = newPtr; } else { currentPtr = startPtr; while (currentPtr != NULL) { if (currentPtr->nextPtr == NULL) { currentPtr->nextPtr = newPtr; break; } currentPtr = currentPtr->nextPtr; } } } void printList2(LinkedListNode *currentPtr) { if (currentPtr == NULL) { printf("\n\n還沒有建立任何好友資料唷...\n\n"); } else { // 依序由鏈結串獵取出資料,然後印在螢幕上 printf("\n\n以下依好友名錄的儲存順序印出好友資料\n"); printf(" 好友暱稱 - 年 齡 - 性 別 - 關 係\n"); while (currentPtr != NULL) { printf("%10s - ", currentPtr->data.name); printf("%5d - ", currentPtr->data.age); printf("%5s - ", currentPtr->data.sex ? "男" : "女"); printf("%s \n", currentPtr->data.relation ? "同學或朋友" : "家人"); currentPtr = currentPtr->nextPtr; } } } /* 《程式語言教學誌》的範例程式 http://pydoing.blogspot.com/ 檔名:listtestn.c 功能:示範鏈結串列的使用 作者:張凱慶 時間:西元2010年7月 */
程式語言 C, C++, C#, Java, JavaScript, Objective-C, Perl, PHP, Python, Ruby, Swift
與網頁標記語言 HTML, CSS 的教學部落格
C 語言初學教材 - 第六章 增加好友 範例程式2
範例程式碼
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言