C 語言初學教材 - 第六章 鏈結串列 範例程式

範例程式碼



#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;

int main(void)
{
    LinkedListNode *startPtr, *newPtr, *currentPtr;
    char fname[NAME_SIZE];
    int i, fage, fsex, frelation;
    
    i = 0;
    startPtr = NULL;
    while (i < 5) {
        // 向作業系統要求新的記憶體空間
        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;
            }
        }
        
        i++;
    }
    
    // 依序由鏈結串獵取出資料,然後印在螢幕上
    currentPtr = startPtr;
    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;
    }
    
    return 0;
}

/* 《程式語言教學誌》的範例程式
    http://pydoing.blogspot.com/
    檔名:listtest.c
    功能:示範鏈結串列的使用  
    作者:張凱慶
    時間:西元2010年7月 */


程式說明及編譯執行,請繼續參考




沒有留言: