单链表

#ifndef LINKLIST_H_INCLUDED
#define LINKLIST_H_INCLUDED

typedef void LinkList;
typedef struct _tag_linklistNode LinkListNode;
typedef struct _tag_linklistNode
{
    LinkListNode* next;
};  // 结点指针域

typedef float I_v;
typedef struct _tag_Value
{
    LinkListNode header;
    I_v  v;
}Value;  //数据元素


LinkList* LinkList_create();
void LinkList_destroy(LinkList* list);
void LinkList_clear(LinkList* list);
int LinkList_length(LinkList* list);


int LinkList_insert(LinkList* list,LinkListNode* node,int pos);
LinkListNode* LinkList_delete(LinkList* list,int pos);
LinkListNode* LinkList_get(LinkList* list,int pos);

void LinkList_Reverse(LinkList* list);


#endif // LINKLIST_H_INCLUDED


////////////////////////////////////////////////////////////////////////////////////////////////////

#include "Linklist.h"
#include

typedef struct _tag_linklist
{
    LinkListNode header;
    int length;
}TLinkList;
/**********************************
*函数功能:创建链表
*参数说明:
*        输入:无
*        输出:链表
*日期:    2018-04-14-15.45
***********************************/
LinkList* LinkList_create()  //o(1)
{
    TLinkList* list=(TLinkList*)malloc(sizeof(TLinkList));
    if(list!=NULL)
    {
        list->length=0;
        list->header.next=NULL;
    }
    return list;
}
void LinkList_destroy(LinkList* list) //o(1)
{
    free(list);
}
void LinkList_clear(LinkList* list)  //o(1)
{
    if(list!=NULL)
    {
        TLinkList* slist=(TLinkList*)list;
        slist->length=0;
        slist->header.next=NULL;
    }
}
int LinkList_length(LinkList* list) //o(1)
{
    if(list!=NULL)
    {
        TLinkList* slist=(TLinkList*)list;
        return slist->length;
    }else{
        return -1;
    }
}

/**********************************
*函数功能: 链表中插入元素
*参数说明:
*        输入:list:链表;node:结点信息;pos:位置
*        输出:插入成功为1,失败为0
*日期:    2018-04-14-15.45
***********************************/
int LinkList_insert(LinkList* list,LinkListNode* node,int pos)  //o(n)
{
    if(list!=NULL && pos>=0 && node!=NULL)
    {
        TLinkList* slist=(TLinkList*)list;
        LinkListNode* current=(LinkListNode*)slist;
        int i=0;

        for(i=0;(inext!=NULL);i++)
        {
            current=current->next;
        }
        node->next=current->next;
        current->next=node;
        slist->length++;
        return 1;
    }else{
        return 0;
    }
}
/**********************************
*函数功能:链表删除
*参数说明:
*        输入:list:链表:pos:位置
*        输出:删除结点
*日期:    2018-04-14-15.45
***********************************/
LinkListNode* LinkList_delete(LinkList* list,int pos)  //o(n)
{
    LinkListNode* ret=NULL;
    if(list!=NULL && pos>=0)
    {
        TLinkList* slist=(TLinkList*)list;
        LinkListNode* current=(LinkListNode*)slist;
        int i=0;
        for(i=0;(inext!=NULL);i++)
        {
            current=current->next;
        }
        ret=current->next;
        current->next=ret->next;
        slist->length--;
    }
    return ret;
}
/**********************************
*函数功能:获取链表中位置元素
*参数说明:
*        输入:list:链表;pos:位置;
*        输出:链表中位置元素
*日期:    2018-04-14-15.45
***********************************/
LinkListNode* LinkList_get(LinkList* list,int pos)  //o(n)
{
   LinkListNode* ret=NULL;
    if(list!=NULL && pos>=0)
    {
        TLinkList* slist=(TLinkList*)list;
        LinkListNode* current=(LinkListNode*)slist;
        int i=0;
        for(i=0;(inext !=NULL);i++)
        {
            current=current->next;
        }
        ret=current->next;
    }
    return ret;
}
/**********************************
*函数功能:链表反转
*参数说明:
*        输入:list:待反转链表
*        输出:
*日期:    2018-04-14-16.45
***********************************/
void LinkList_Reverse(LinkList* list)
{
    if(list!=NULL)
    {
        TLinkList* slist=(TLinkList*)list;
        LinkListNode* temp=(LinkListNode*)slist;
        LinkListNode* p=NULL;

        temp=slist->header.next;
        while(temp->next !=NULL)
        {
            p=temp->next;
            temp->next=p->next;
            p->next=slist->header.next;
            slist->header.next=p;
        }
    }
}


////////////////////////////////////////////////////////////////////////////////////////////////////

#include
#include
#include "Seqlist.h"
#include "Linklist.h"


int main()
{
    LinkList* list=LinkList_create();
    Value VV[]={0};

    Value  v1;
    Value  v2;
    Value  v3;
    Value  v4;
    Value  v5;
    int i=0;

    v1.v=1.1;
    v2.v=2.2;
    v3.v=3.3;
    v4.v=4.4;
    v5.v=5.5;

    LinkList_insert(list,&v1,LinkList_length(list));
    LinkList_insert(list,&v2,0);
    LinkList_insert(list,&v3,0);
    LinkList_insert(list,&v4,LinkList_length(list));
    LinkList_insert(list,&v5,0);

    for(i=0;i    {
        Value* temp=(Value*)LinkList_get(list,i);
        printf("%f\t",temp->v);
    }

    printf("\n-------------------\n");


    LinkList_Reverse(list);
    for(i=0;i    {
        Value* temp=(Value*)LinkList_get(list,i);
        printf("%f\t",temp->v);
    }

    printf("\n-------------------\n");



    while(LinkList_length(list)>0)
    {
        Value* temp=(Value*)LinkList_delete(list,0);
        printf("%f\t",temp->v);
    }
    printf("\n-------------------\n");
    printf("ok\n");
    return 0;
}






你可能感兴趣的:(数据结构与算法)