1. 程式人生 > >C 語言 連結串列的建立與列印

C 語言 連結串列的建立與列印

    /* 包含的標頭檔案 */
    #include <stdio.h>
    #include <stdlib.h>

    /* 定義一個表示連結串列的結構體指標 */
    struct list {
        int id;         /* 標識這個元素方便查詢 */
        char data[20];      /* 連結串列中包含的元素 */
        struct list *next;  /* 指向下一個連結串列的指標 */
    };

    /* 定義一個連結串列頭部 */
    static struct list *list_head = NULL;

    /* 為了保證每一個連結串列元素的id不同,特意把id定義成一個全域性靜態變數 */
static int list_id = 0; /** 將指定元素插入到聊表尾部 * head : 表示要插入元素的連結串列的頭部的地址 * list : 表示要插入到連結串列中的元素 */ static void list_add(struct list **head, struct list *list) { struct list *temp; /* 判斷連結串列是否為空 */ if(NULL == *head) { /* 為空 */
*head = list; (*head)->next = NULL; } else { /* 不為空 */ temp = *head; while(temp) { if(NULL == temp->next) { temp->next = list; list
->next = NULL; } temp = temp->next; } } } /** 遍歷一個連結串列,列印連結串列中每個元素所包含的資料 * head : 表示要遍歷的連結串列的頭部的指標 */ static void list_print(struct list **head) { struct list *temp; temp = *head; printf("list information :\n"); while(temp) { printf("\tlist %d : %s\n", temp->id, temp->data); temp = temp->next; } } /* 主函式,程式的入口 */ int main(int argc, char *argv[]) { int i = 0; struct list *lists = NULL; /* 分配10個元素 */ lists = malloc(sizeof(struct list) * 10); if(NULL == lists) { printf("malloc error!\n"); return -1; } /* 將分配的10個元素依次填充資料並加入到連結串列當中 */ for(i = 0; i < 10; i++) { lists[i].id = list_id++; sprintf(lists[i].data, "TECH-PRO - %d", i); list_add(&list_head, &lists[i]); } /* 遍歷連結串列,把連結串列中每個元素的資訊都打印出來 */ list_print(&list_head); return 0; }