链表学习过程记录,实现链表创建、删除、插入等
代码如下:
/**************************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;
}
}