C语言简单实现单向链表

链表学习过程记录,实现链表创建、删除、插入等

代码如下:

/**************************include****************************/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
/**************************typedef****************************/
typedef int stlistdata;
struct dylistnote{
    stlistdata data;
    struct dylistnote* next;
};
typedef struct dylistnote* dylistnote_t;
/***************************statement*************************/
static dylistnote_t dy_list_init(void);
static void dy_list_print(dylistnote_t headp);
static dylistnote_t dy_list_get_tail(dylistnote_t headp);
static dylistnote_t dy_list_get_tail_front(dylistnote_t headp);
static dylistnote_t dy_list_buy(stlistdata data);
static dylistnote_t dy_list_push_tail(dylistnote_t headp,stlistdata data);
static dylistnote_t dy_list_push_head(dylistnote_t headp,stlistdata data);
static dylistnote_t dy_list_pop_tail(dylistnote_t headp);
static dylistnote_t dy_list_pop_head(dylistnote_t headp);
static void dy_list_delete_all(dylistnote_t headp);
/***************************function**************************/

/**
*@function:测试
**/
int main(void)
{
    dylistnote_t listp = NULL;
    listp = dy_list_init();
    dy_list_push_tail(listp,1);
    dy_list_push_tail(listp,2);
    dy_list_push_tail(listp,3);
    dy_list_push_head(listp,0);
    dy_list_pop_tail(listp);
    dy_list_pop_head(listp);
    dy_list_delete_all(listp);
    dy_list_print(listp);
    return 0;
}
/**
*@function:初始化链表
**/
static dylistnote_t dy_list_init(void)
{
    dylistnote_t headp = NULL;
    headp = (dylistnote_t)malloc(sizeof(struct dylistnote));
    if(headp != NULL)
    {
        headp->next = NULL;
    }
    return headp;
}
/**
*@function:打印链表信息
**/
static void dy_list_print(dylistnote_t headp)
{
    if(headp->next == NULL)
    {
        printf("list data is null");
    }
    headp = headp->next;
    while(headp)
    {
        printf("list data is %d\n",headp->data);
        headp = headp->next;
    }
}
/**
*@function:开辟新节点
**/
static dylistnote_t dy_list_buy(stlistdata data)
{
    dylistnote_t datap = NULL;
    datap = (dylistnote_t)malloc(sizeof(struct dylistnote));
    if(datap != NULL)
    {
        memcpy(&(datap->data),&data,sizeof(data));
        datap->next = NULL;
    }
    return datap;
}
/**
*@function:获取链表尾节点
**/
static dylistnote_t dy_list_get_tail(dylistnote_t headp)
{
    dylistnote_t tailp = NULL;
    if(headp != NULL)
    {
        tailp = headp;
        while(tailp->next)
        {
            tailp = tailp->next;
        }
    }
    return tailp;
}
/**
*@function:获取链表尾节点前一个节点
**/
static dylistnote_t dy_list_get_tail_front(dylistnote_t headp)
{
    dylistnote_t tailp = NULL;
    dylistnote_t frontp = NULL;
    if(headp != NULL)
    {
        tailp = headp;
        while(tailp->next)
        {
            frontp = tailp;
            tailp = tailp->next;
        }
    }
    return frontp;
}
/**
*@function:尾插入
**/
static dylistnote_t dy_list_push_tail(dylistnote_t headp,stlistdata data)
{
    dylistnote_t datap = NULL;
    dylistnote_t tailp = NULL;
    if(headp != NULL)
    {
        tailp = dy_list_get_tail(headp);
        if(tailp != NULL)
        {
            datap = dy_list_buy(data);
            if(datap != NULL)
            {
                tailp->next = datap;
            }
        }
    }
    return datap;
}
/**
*@function:头插入
**/
static dylistnote_t dy_list_push_head(dylistnote_t headp,stlistdata data)
{
    dylistnote_t datap = NULL;
    if(headp != NULL)
    {
        datap = dy_list_buy(data);
        if(datap != NULL)
        {
            datap->next = headp->next;
            headp->next = datap;
        }
    }
    return datap;
}
/**
*@function:删除一个节点
**/
static void dy_list_sell(dylistnote_t datap)
{
    if(datap != NULL)
    {
        free(datap);
    }
}
/**
*@function:尾删除
**/
static dylistnote_t dy_list_pop_tail(dylistnote_t headp)
{
    dylistnote_t front = NULL;
    front = dy_list_get_tail_front(headp);
    if(front != NULL)
    {
        dy_list_sell(front->next);
        front->next = NULL;
    }
    return front;
}
/**
*@function:头删除
**/
static dylistnote_t dy_list_pop_head(dylistnote_t headp)
{
    dylistnote_t datap = NULL;
    if(headp->next != NULL)
    {
        datap = headp->next->next;
        dy_list_sell(headp->next);
        headp->next = datap;
    }
}
/**
*@function:清空链表
**/
static void dy_list_delete_all(dylistnote_t headp)
{
    dylistnote_t tailp = NULL;
    if(headp == NULL)
    {
        return;
    }
    while(headp->next)
    {
        tailp = headp->next->next;
        dy_list_sell(headp->next); 
        headp->next = tailp;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值