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");
}

猜你喜欢

转载自blog.csdn.net/u012778549/article/details/78709404