顺序线性表

#ifndef SEQLIST_H_INCLUDED
#define SEQLIST_H_INCLUDED

typedef void SeqList;
typedef void SeqListNode;

SeqList* Seqlist_create(int capacity);
void Seqlist_destroy(SeqList* list);
void Seqlist_clear(SeqList* list);
int Seqlist_length(SeqList* list);
int Seqlist_capacity(SeqList* list);

int Seqlist_insert(SeqList* list,SeqListNode* node,int pos);
SeqListNode* Seqlist_delete(SeqList* list,int pos);
SeqListNode* Seqlist_get(SeqList* list,int pos);

#endif // SEQLIST_H_INCLUDED


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

#include "Seqlist.h"
#include <malloc.h>

typedef unsigned int TSeqListNode;
typedef struct __tag_list
{
    int length;
    int capacity;
    TSeqListNode* node;
}TSeqList;

/**********************************
*函数功能:顺序线性表的创建
*参数说明:
*        输入:capacity:容量大小
*        输出:seqlist: 返回创建的线性表
*日期:    2018-04-14-08.45
***********************************/
SeqList* Seqlist_create(int capacity)  //o(1)
{
    if(capacity>0)
    {
        TSeqList* list=(TSeqList*)malloc(sizeof(TSeqList)+capacity*sizeof(TSeqListNode*));
        if(list!=NULL){
          list->capacity=capacity;
          list->length=0;
          list->node=(TSeqListNode*)(list+1);
        }else{
          return NULL;
        }
        return list;
    }else{
     return NULL;
    }
}
/**********************************
*函数功能:删除线性表
*参数说明:
*        输入:list:创建的线性表
*        输出:void
*日期:    2018-04-14-08.45
***********************************/
void Seqlist_destroy(SeqList* list)  //o(1)
{
    free(list);
}
/**********************************
*函数功能:清空线性表
*参数说明:
*        输入:list:创建的线性表
*        输出:void
*日期:    2018-04-14-08.45
***********************************/
void Seqlist_clear(SeqList* list)   //o(1)
{
    if(list!=NULL)
    {
        TSeqList* slist=(TSeqList*)list;
        slist->capacity=0;
        slist->length=0;
    }
}
int Seqlist_length(SeqList* list)  //o(1)
{
    if(list!=NULL)
    {
        TSeqList* slist=(TSeqList*)list;
        return slist->length;
    }else{
        return -1;
    }
}
int Seqlist_capacity(SeqList* list)  //o(1)
{
    if(list!=NULL){
        TSeqList* slist=(TSeqList*)list;
        return slist->capacity;
    }else{
        return -1;
    }
}
/**********************************
*函数功能:顺序线性表元素插入
*参数说明:
*        输入:list:待插入线性表;node:节点元素;pos:位置
*        输出:插入成功为1,失败为0
*日期:    2018-04-14-09.58
***********************************/
int Seqlist_insert(SeqList* list,SeqListNode* node,int pos)  //o(n)
{
    if(list!=NULL && pos>=0)
    {
        TSeqList* slist=(TSeqList*)list;
        int ret=1;
        int i=0;
        ret=ret && (slist->capacity >= pos+1) && (node != NULL);
        if(ret)
        {
            if(pos >= slist->length)
            {
                pos=slist->length;
            }
            for(i=slist->length;i>pos;i--)
            {
                slist->node[i]=slist->node[i-1];
            }
            slist->node[pos]=(TSeqListNode)node;
            slist->length++;
        }
        return ret;

    }else{
        return 0;
    }
}
/**********************************
*函数功能:顺序线性表删除
*参数说明:
*        输入:list:待删除线性表;pos:位置
*        输出:删除节点位置元素
*日期:    2018-04-14-09.58
***********************************/
SeqListNode* Seqlist_delete(SeqList* list,int pos) //o(n)
{
    if(list!=NULL && pos>=0)
    {
        TSeqList* slist=(TSeqList*)list;
        int ret=1;
        int i=0;
        SeqListNode* result=NULL;
        ret=ret && (slist->length > pos);
        if(ret)
        {
            result=slist->node[pos];
            for(i=pos+1;i<slist->length;i++)
            {
                slist->node[i-1]=slist->node[i];
            }
            slist->length--;
        }
        return result;
    }else{
        return NULL;
    }
}
/**********************************
*函数功能:获取线性表元素
*参数说明:
*        输入:list:线性表;pos:位置
*        输出:位置元素
*日期:    2018-04-14-09.58
***********************************/
SeqListNode* Seqlist_get(SeqList* list,int pos) //o(1)
{
    if(list!=NULL && pos>=0)
    {
        TSeqList* slist=(TSeqList*)list;
        int ret=1;
        ret=ret && (slist->length > pos);
        if(ret)
        {
            return (SeqListNode*)slist->node[pos];
        }else{
            return NULL;
        }
    }else{
        return NULL;
    }
}



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

#include <stdio.h>
#include <stdlib.h>
#include "Seqlist.h"


int main()
{
    SeqList* list=Seqlist_create(10);
    int K[]={1,2,3,4,5,6,7,8,9,10,11};
    int length=sizeof(K)/sizeof(*K);
    int i=0;
    for(i=0;i<length;i++)
    {
       Seqlist_insert(list,&(*(K+i)),i);
    }
    for(i=0;i<Seqlist_length(list);i++)
    {
        int* temp=(int*)Seqlist_get(list,i);
        printf("%d\t",*temp);
    }
    printf("\n-------------------\n");
    printf("capacity = %d\n",Seqlist_capacity(list));
    while(Seqlist_length(list)>0)
    {
        int* temp=(int*)Seqlist_delete(list,0);
        printf("%d\t",*temp);
    }
    printf("\n");
    printf("capacity = %d\n",Seqlist_capacity(list));
    printf("Hello world!\n");
    Seqlist_destroy(list);
    return 0;
}


猜你喜欢

转载自blog.csdn.net/csu_guo_liang/article/details/79937315