当前位置: 移动技术网 > IT编程>开发语言>C/C++ > 数据结构与算法之顺序表C语言实现

数据结构与算法之顺序表C语言实现

2018年12月28日  | 移动技术网IT编程  | 我要评论

天正建筑8.2免费下载,酒瓶门下载,网上怎么买手机号

顺序表等相关概念请自行查阅资料,这里主要是实现。

注:

1.顺序表c语言实现;

2.按较简单的方式实现,主要帮助理解,可在此基础上修改,更加完善;

3.提供几个简单函数,可自行添加功能;

4.可用c++封装,得知stl中vector原理。

 

 顺序表容量。

#define capacity 20 //容量

顺序表结构体。

typedef struct 
{
    int *m_phead; //指向数组头
    int m_isize; //大小
    int m_icapacity; //容量
}stable;

部分操作,可自行添加其他操作。

stable* createtable();
void appendelement(stable* ptable, int ielement);
void insertelement(stable* ptable, int ielement, int index);
void delelement(stable* ptable, int index);
int getat(stable* ptable, int index);
void setat(stable* ptable, int ielement, int index);
void showtable(stable* ptable);
void releasemem(stable* ptable);

分配内存,元素个数为0。

stable* createtable()
{
    stable *ptable = (stable*)malloc(sizeof(stable));
    if(!ptable)
    {
        printf("动态内存分配失败!\n");
        return ptable;
    }

    ptable->m_phead = (int*)malloc(sizeof(int) * capacity);
    if(!ptable->m_phead)
    {
        printf("动态内存分配失败!\n");
        return null;
    }

    ptable->m_isize = 0;
    ptable->m_icapacity = capacity;

    return ptable;
}

追加

void appendelement(stable* ptable, int ielement) 
{
    if(!ptable || !ptable->m_phead)
    {
        printf("顺序表不存在!\n");
        return;
    }

    if(ptable->m_isize == ptable->m_icapacity)
    {
        printf("顺序表已满!\n"); //可以重新分配内存 这里就不实现了 从简
        return;
    }
    
    ptable->m_phead[ptable->m_isize] = ielement;
    ptable->m_isize++;
}

插入

void insertelement(stable* ptable, int ielement, int index)
{
    if(!ptable || !ptable->m_phead)
    {
        printf("顺序表不存在!\n");
        return;
    }

    if(ptable->m_isize == ptable->m_icapacity)
    {
        printf("顺序表已满!\n"); //可以重新分配内存 这里就不实现了 从简
        return;
    }

    if(index < 0 || index > ptable->m_isize)
    {
        printf("插入位置不合理!\n");
        return;
    }

    //后移
    for(int i = ptable->m_isize - 1; i >= index; i--)
    {
        ptable->m_phead[i+1] = ptable->m_phead[i];
    }
    ptable->m_phead[index] = ielement;
    ptable->m_isize++;
}

删除

void delelement(stable* ptable, int index)
{
    if(!ptable || !ptable->m_phead)
    {
        printf("顺序表不存在!\n");
        return;
    }

    if(ptable->m_isize < 1)
    {
        printf("顺序表元素个数为0!\n");
        return;
    }

    if(index < 0 || index > ptable->m_isize - 1)
    {
        printf("删除元素位置不合理!\n");
        return;
    }

    //前移
    for(int i = index; i < ptable->m_isize - 1; i++)
    {
        ptable->m_phead[i] = ptable->m_phead[i+1];
    }

    ptable->m_isize--;
}

获取

int getat(stable* ptable, int index)
{
    if(!ptable || !ptable->m_phead)
    {
        printf("顺序表不存在!\n");
        return -1;
    }

    if(index < 0 || index > ptable->m_isize - 1)
    {
        printf("索引不合理!\n");
        return -1;
    }

    return ptable->m_phead[index];
}

修改

void setat(stable* ptable, int ielement, int index)
{
    if(!ptable || !ptable->m_phead)
    {
        printf("顺序表不存在!\n");
        return;
    }

    if(index < 0 || index > ptable->m_isize - 1)
    {
        printf("索引不合理!\n");
        return;
    }

    ptable->m_phead[index] = ielement;
}

打印所有元素。

void showtable(stable* ptable)
{
    if(!ptable || !ptable->m_phead)
    {
        printf("顺序表不存在!\n");
        return;
    }

    printf("容量:%d,大小:%d,打印元素:\n", ptable->m_icapacity, ptable->m_isize);
    for(int i = 0; i < ptable->m_isize; i++)
        printf("%d ", ptable->m_phead[i]);

    printf("\n");
}

内存释放。

void releasemem(stable* ptable)
{
    if(!ptable)
    {
        printf("顺序表不存在!\n");
        return;
    }

    if(ptable->m_phead)
        free(ptable->m_phead);

    free(ptable);
    printf("内存释放成功!\n");
}

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网