回覆列表
  • 1 # 使用者834195712159

    函式main()裡的語句 LinkList L; 系統自動給變數L分配了記憶體,

    L對應的是第2個結構體,也就是LinkList.

    呼叫初始化函式InitList(),給變數L裡的成員head,tail,len進行賦值,

    L.head指向的就是空連結串列,此時,L.head=NULL,同時,L.len=0,表示沒有結點.

    所以執行函式InitList()之後,也就製造了空連結串列.

    執行函式InsertNode()之後,連結串列就加入了新結點, 結點對應的是第1個結構體,也就是LNode

    L.head指向連結串列的頭結點, L.tail指向連結串列的末尾結點, L.len表示結點的數量.

    測試結果:

    初始化之後,連結串列長度是 0

    插入資料之後,連結串列長度是 3

    連結串列裡的資料是: 10 20 30

    //程式碼用了"引用"(&),所以要用C++編譯器進行測試

    #include<stdio.h>

    #include<stdlib.h>

    typedef int ElemType;

    typedef int Status;

    typedef struct LNode

    {

    ElemType data;

    struct LNode *next;

    }*Link, *Position;

    typedef struct

    {

    Link head,tail;

    int len;

    }LinkList;

    Status InitList(LinkList &L);

    Status InsertNode(LinkList &L,ElemType e);

    Status ListTraverse(LinkList L);

    int ListLength(LinkList L);

    //連結串列初始化

    Status InitList(LinkList &L) //&是"引用"符號

    {

    L.head = NULL;

    L.tail = NULL;

    L.len = 0;

    return 1;

    }

    //插入結點

    Status InsertNode(LinkList &L,ElemType e) //&是"引用"符號

    {

    LNode *newNode;

    newNode=(LNode *)malloc(sizeof(LNode));

    if(newNode==NULL)

    {

    printf("\n分配記憶體錯誤.\n");

    exit(1);

    }

    newNode->data = e;

    newNode->next = NULL;

    //用"尾插法"新增新結點

    if(L.head==NULL)

    {

    L.head = newNode;

    L.tail = newNode;

    L.len = 1;

    }

    else

    {

    L.tail->next = newNode;

    L.tail = newNode;

    L.len = L.len+1;

    }

    return 1;

    }

    //連結串列遍歷

    Status ListTraverse(LinkList L)

    {

    Link p;

    p = L.head;

    if(p == NULL)

    {

    printf("\n連結串列為空.\n");

    return 0;

    }

    while(p != NULL)

    {

    printf("%d ",p->data);

    p = p->next;

    }

    printf("\n");

    return 1;

    }

    //連結串列長度

    int ListLength(LinkList L)

    {

    return L.len;

    }

    int main()

    {

    LinkList L;

    InitList(L);

    printf("初始化之後,連結串列長度是 %d\n",ListLength(L));

    InsertNode(L,10);

    InsertNode(L,20);

    InsertNode(L,30);

    printf("插入資料之後,連結串列長度是 %d\n",ListLength(L));

    printf("連結串列裡的資料是: ");

    ListTraverse(L);

    return 0;

    }

  • 中秋節和大豐收的關聯?
  • 冠狀病毒突變,突變使其更具感染性嗎?