c/c++语言开发共享数据结构与算法之顺序表C语言实现

顺序表等相关概念请自行查阅资料,这里主要是实现。 注: 1.顺序表C语言实现; 2.按较简单的方式实现,主要帮助理解,可在此基础上修改,更加完善; 3.提供几个简单函数,可自行添加功能; 4.可用C++封装,得知STL中vector原理。 顺序表容量。 顺序表结构体。 部分操作,可自行添加其他操作。 …

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

注:

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"); }

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/605739.html

(0)
上一篇 2021年5月13日
下一篇 2021年5月13日

精彩推荐