资源简介

c语言实现的模板,实现方法是使用void指针和size 包括list queue stack三种

资源截图

代码片段和文件信息

/**
* function: 实现链表
* author: Xiaomu<070105083@163.com>
* time: 2012-5-19-night
*
*/
#include “List.h“

#include 
#include 
#include 

/**
* 初始化链表
* @head 链表指针
* @userDataSize 用户数据大小
* @return LIST_OK for ok LIST_ERROR for error
*/
int initList(List *headint userDataSize)
{
    if(head==NULL || userDataSize<=0)
        return(LIST_ERROR);

    head->userDataSize=userDataSize;
    head->next=NULL;

    return LIST_OK;
}
/**
* 在位置pos处插入元素
* @head 链表指针
* @e 指向新元素指针,该方法会创建新对象保存此指针指向的用户数据
* @pos 元素插入位置(0<=pos<=List.length)
* @return LIST_OK for ok LIST_ERROR for error
*/
int insertList(List *headconst void *eint pos)
{
    if(head==NULL || e==NULL)
        return(LIST_ERROR);
    if(pos<0 || (pos>1 && head->next==NULL))
        return(LIST_ERROR);

    if(pos==0)
    {
        //在链表头部插入
        //申请内存空间拷贝用户数据,以及新的链表对象
        struct __ListElement *newElement=(struct __ListElement*)malloc(sizeof(struct __ListElement));
        if(newElement==NULL)
            return(LIST_ERROR);
        newElement->data=malloc(head->userDataSize);
        if(newElement->data==NULL)
        {
            free(newElement);
            return(LIST_ERROR);
        }
        if(NULL==memcpy(newElement->dataehead->userDataSize))
        {
            free(newElement->data);
            free(newElement);
            return(LIST_ERROR);
        }

        newElement->next=head->next;
        head->next=newElement;
    }
    else
    {
        struct __ListElement *pre=head->next *cur=head->next->next;
        int i=1;
        while(i        {
            pre=cur;
            cur=cur->next;
            ++i;
        }
        if(i            return(LIST_ERROR);

        //其他位置插入
        //申请内存空间拷贝用户数据,以及新的链表对象
        struct __ListElement *newElement=(struct __ListElement*)malloc(sizeof(struct __ListElement));
        if(newElement==NULL)
            return(LIST_ERROR);
        newElement->data=malloc(head->userDataSize);
        if(newElement->data==NULL)
        {
            free(newElement);
            return(LIST_ERROR);
        }
        if(NULL==memcpy(newElement->dataehead->userDataSize))
        {
            free(newElement->data);
            free(newElement);
            return(LIST_ERROR);
        }

        newElement->next=cur;
        pre->next=newElement;
    }

    return(LIST_OK);
}
/**
* 在链表结尾插入新元素
* @head 链表指针
* @e 指向新元素指针,该方法会创建新对象保存此指针指向的用户数据
* @return LIST_OK for ok LIST_ERROR for error
*/
int appendList(List *headconst void *e)
{
    if(head==NULL || e==NULL)
        return(LIST_ERROR);

    //其他位置插入
    //申请内存空间拷贝用户数据,以及新的链表对象
    struct __ListElement *newElement=(struct __ListElement*)malloc(sizeof(struct __ListElement));
    if(newElement==NULL)
        return(LIST_ERROR);
    newElement->data=malloc(head->userDataSize);
    if(newElement->data==NULL)
    {
       

评论

共有 条评论