鏈結串列 -- 內含物件版

高等 C 語言

簡介

字串

指標與陣列

函數

結構

物件導向

記憶體

檔案

錯誤處理

巨集處理

C 與組合語言

資料結構

動態字串

動態陣列

鏈結串列

雜湊表

開發環境

Make

Cygwin

MinGW

DevC++

wxDevC++

編譯器

gcc 編譯器

TinyCC 編譯器

LCC 編譯器

應用主題

CGI 程式

GNU 程式

視窗程式

影像處理

練習題

訊息

相關網站

參考文獻

最新修改

簡體版

English

程式範例:鏈結串列 — 內含物件版

#include <stdio.h>
 
typedef struct lnode { 
  struct lnode *next;
  void *obj;
} ListNode;
 
typedef struct {
  ListNode *head;
} List;
 
void ListNew(List *list) {
  list->head = NULL;
}
 
void ListAdd(List *list, ListNode *node) {
  if (node == NULL) return;
  node->next = list->head;
  list->head = node;
}
 
typedef void(*F1)(void*);
 
void ListPrint(List *list, F1 f) {
  ListNode *p;
  for (p = list->head; p != NULL; p=p->next)
    f(p->obj);
}
 
typedef struct {
    char *name;
    int age;
} Person;
 
void PersonPrint(Person *p) {
  printf("%s is %d years old\n", p->name, p->age);  
}
 
int main() {
    Person john = {
      .name = "John",
      .age = 40
    };
    Person mary = {
      .name = "Mary",
      .age = 32
    };
    Person george = {
      .name = "George",
      .age = 26
    };
    ListNode jnode = { .obj=&john, .next=NULL };
    ListNode mnode = { .obj=&mary, .next=NULL };
    ListNode gnode = { .obj=&george, .next=NULL };
    List list;
    ListNew(&list);
    ListAdd(&list, &jnode);
    ListAdd(&list, &mnode);
    ListAdd(&list, &gnode);
    ListPrint(&list, (F1) PersonPrint);
    return 0;
}

執行結果

D:\cp>gcc LinkedListObj.c -o LinkedListObj

D:\cp>LinkedListObj
George is 26 years old
Mary is 32 years old
John is 40 years old

Facebook

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License