线性表(四)实现

来源:互联网 发布:java友盟推送demo 编辑:程序博客网 时间:2024/04/28 16:48

下面是自己写的一个线性表的实现

/*
#include<stdio.h>
#include<malloc.h>

#define MAXSIZE 100
typedef int ElementType;

*
 * 对于插入和删除的时间复杂度为O(n)
 * 对于,读取时间复杂度为O(1)
 * 最好的情况是0(1)
 * 最坏的情况是O(n)
 * 平均情况是0((n-1)/2)
 * 简化后为O(n)

typedef struct
{
    ElementType data[MAXSIZE];
    int length;
}SqList;

*
 * 初始化线性表

int initList(SqList *sqList)
{
    //sqList=malloc(sizeof(sqList));
    sqList->length=0;
}
*
 * 判断线性表是否为空

int listIsEmpty(SqList *sqList){
    return sqList->length==0?0:1;
}
*
 * 清空线性表

int clearList(SqList *sqList){
    sqList->length=0;
}

int operateIndexIsRight(SqList *sqList,int i)
{
    if(listIsEmpty(sqList))
    {
        if(i>sqList->length)
        {
            return 0;
        }
        else if(i<=0)
        {
            return 0;
        }
        return 1;
    }else{
        return 0;
    }
}

*
 * 将线性表L中的第i个位置元素返回给e

int GetElement(SqList *sqList,int i,ElementType *element)
{
    if(operateIndexIsRight(sqList,i))
    {
        *element=sqList->data[i-1];
        return 1;
    }else{
        return 0;
    }
}
*
 * 在线性表L中查找与给定值e相等的数据,如果查找成功,返回该元素在表 中序号表示成功,否则,返回0表示失败

int searchElement(SqList *sqList,ElementType e)
{
    int diedai;
    if(listIsEmpty(sqList))
    {
        for(diedai=0;diedai<sqList->length;diedai++)
        {
            if(e==sqList->data[diedai])
            {
                return diedai+1;
            }
        }
        return 0;
    }else{
        return 0;
    }
}
*
 *在线性表L中第i个位置插入新的元素e

int insertList(SqList *sqList,int i,ElementType e)
{
    int diedai;
    if(i>MAXSIZE)
    {
        return 0;
    }
    else if(i<=0)
    {
        return 0;
    }else{
        for(diedai=sqList->length-1;diedai>=i-1;diedai--)
        {
            sqList->data[diedai+1]=sqList->data[diedai];
        }
        sqList->data[i-1]=e;
        sqList->length++;
        return 1;
    }
}

*
 * 小甲鱼的插入

ListInsert(SqList *L,int i,ElementType e)
{
    int k;
    if(L->length==MAXSIZE)
    {
        return 0;
    }
    if(i<1||i>L->length+1)
    {

    }
    if(i<=L->length)
    {
        for(k=L->length-1;k>=i-1;k--)
        {
            L->data[k+1]=L->data[k];
        }
    }
    L->data[i-1]=e;
    L->length++;
    return 1;
}
*
 *删除线性表L中第i个位置元素,并用e返回其值

int deleteList(SqList *sqList,int i,ElementType *e)
{
    int diedai;
    if(operateIndexIsRight(sqList,i))
    {
        *e=sqList->data[i-1];
        for(diedai=i-1;diedai<sqList->length-1;diedai++)
        {
            sqList->data[diedai]=sqList->data[diedai+1];
        }
        sqList->length--;
        return 0;
    }else{
        return 0;
    }
}
*
 * 返回线性表L的元素个数

int listLength(SqList *sqList)
{
    return sqList->length;
}

*
 * 遍历打印线性表中所有的元素

int printLinerTable(SqList *sqList)
{
    int variable;
    for(variable=0;variable<sqList->length;variable++)
    {
        printf("%d\n",sqList->data[variable]);
    }
}
int main(){
    int searchVariable;
    ElementType variable;
    //初始化线性表
    SqList sqList;
    initList(&sqList);
    //插入数据
    insertList(&sqList,1,1);
    insertList(&sqList,2,2);
    insertList(&sqList,3,3);
    insertList(&sqList,4,4);
    insertList(&sqList,5,5);
    insertList(&sqList,3,18);
    printLinerTable(&sqList);
    //打印线性表的元素个数
    printf("元素表中一共有:%d个元素\n",listLength(&sqList));
    //查找
    searchVariable=3;
    printf("需要查找的元素:%d在第:%d个位置\n",searchVariable,searchElement(&sqList,searchVariable));
    //获取指定元素
    searchVariable=3;
    GetElement(&sqList,searchVariable,&variable);
    printf("第:%d个元素是:%d\n",searchVariable,variable);
    //删除
    searchVariable=3;
    deleteList(&sqList,searchVariable,&variable);
    printf("需要删除的元素:%d在第:%d个位置\n",variable,searchVariable);
    printLinerTable(&sqList);
    //打印线性表的元素个数
    printf("元素表中一共有:%d个元素\n",listLength(&sqList));
    //判断线性表是否为空
    printf("%d\n",listIsEmpty(&sqList));
    //清空线性表
    clearList(&sqList);
    //判断线性表是否为空
    printf("%d\n",listIsEmpty(&sqList));
}

*/


0 0