天天看點

linux C 資料結構之單連結清單

基礎學習,隻有一種資料類型的單連結清單

對連結清單的了解:

一種鍊式存儲結構,通過指針指向下一個要存儲的資料的位址,在記憶體中不要求連結清單中各個資料記憶體連續,與數組不同,連結清單由節點組成,通過指針連結。

對連結清單概念的了解:

頭指針:頭指針指向連結清單的第一個節點

頭節點:頭節點在定義頭指針時産生

struct node{
    int data;
    struct node *pNext;
};
           

連結清單類型定義

data為連結清單該節點存儲的資料

pNext指向下一個節點

對連結清單的操作包括:建立節點、在鍊頭插入節點、在鍊尾插入節點、删除節點、周遊連結清單。

建立節點步驟:

1、申請一個節點大小的記憶體空間

2、檢查空間是否申請成功

3、清理申請到的記憶體空間

4、填充該節點的資料

5、将節點中的指針初始化為NULL

struct node * creat_node(int data){
    struct node * p = (struct node *)malloc(sizeof(struct node));
    if(NULL == p){
        printf("malloc error !\n");
        return NULL;
    }
    bzero(p,sizeof(struct node));
    p->data = data;
    p->pNext= NULL;
    return p;
}
           

在鍊頭插入節點步驟:

1、新節點指向原來的第一節點

2、頭節點的指針指向新的節點

void insert_head(struct node*pH,struct node*new){
    new->pNext = pH->pNext;
    pH->pNext = new;
}
           

在鍊尾插入節點步驟:

1、找到鍊位節點(該節點的指針為NULL)

2、将鍊位節點指針指向新節點

void insert_tail(struct node*pH,struct node*new){
    struct node*p = pH;
    while(NULL != p->pNext){
        p = p->pNext;
    }
    p->pNext = new;
}
           

删除節點:

引用塊内容

周遊連結清單步驟:

1、由頭節點開始周遊并判斷目前節點是否為尾節點

2、不是尾節點則取出資料并移動到下一個節點

3、是尾節點,取出資料并停止周遊

void list_foreach(struct node*pH){
    struct node *p = pH;
    printf("start____________________\n");
    while(NULL != p->pNext){
        p = p->pNext;
        printf("data = %d\n",p->data);
    }
    printf("data = %d\n",p->data);
    printf("end____________________\n");
}
           

繼續閱讀