離散存儲_鏈表

鏈表的定義:

      鏈表也是一種線性表,它的數據的邏輯組織形式是一維的。鏈表的物理存儲結構使用一組地址任意的存儲單元存儲數據的。在鏈表中每個結點可以是一個結構體元素,當然也可以是其他構造類型元素。在鏈表的每一個結點中,有一個專門用來存檔指針的域,用這個指針來存放後繼結點的地址。
      一個鏈表通常有一個表頭,它是一個指針變量,用來存放第一個結點的地址。此外,鏈表的最後一個結點的指針域要置空(NULL),因爲它沒有後繼結點。
一個鏈表的結點可以使用以下代碼描述:
typedef struct Node
{
    int data;            /*數據域*/
    struct Node * next;  /*指針域*/
} NODE, *PNODE;

創建一個鏈表:

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>

typedef struct Node
{
    int data;             /*數據域*/
    struct Node * pNext;  /*指針域*/
} NODE, * PNODE;

PNODE create_list(void);
void traverse_list(PNODE);

int main(void)
{
    PNODE pHead= NULL;
    pHead = create_list();  //創建一個非循環單鏈表
    return 0;
}

PNODE create_list(void)
{
    int len;
    int i;
    int val;

    PNODE pHead = (PNODE)malloc(sizeof(NODE));
    if(NULL == pHead)
    {
        printf("分配失敗!\n");
        exit(-1);
    }

    PNODE pTail = pHead;
    pTail->pNext = NULL;

    printf("請輸入鏈表的長度:len = ");
    scanf("%d",&len);

    for(i=0;i<len;i++)
    {
        printf("請輸入第 %d 個結點的值:",i+1);
        scanf("%d",&val);

        PNODE pNew = (PNODE)malloc(sizeof(NODE));
        if(NULL == pHead)
        {
            printf("分配失敗!\n");
            exit(-1);
        }

        pNew->data = val;
        pTail->pNext = pNew;  //pTail指向最後一個結點
        pNew->pNext = NULL;
        pTail = pNew;
    }

    return pHead;

}

遍歷鏈表:

void traverse_list(PNODE pHead)
{
    PNODE p = pHead->pNext;
    while(NULL != p)
    {
        printf("%d  ",p->data);
        p = p->pNext;
    }
    printf("\n");
}

判斷鏈表是否爲空:

int is_empty(PNODE pHead)
{
    if(NULL == pHead)
    {
        printf("鏈表爲空!\n");
        return 1;
    }
    else
    {
        return 0;
    }
}

計算鏈表的長度:

int length_list(PNODE pHead)
{
    PNODE p = pHead->pNext;
    int len = 0;
    while(NULL != p)
    {
        len++;
        p = p->pNext;
    }
    return len;
}




















發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章