数据结构与算法之顺序表C语言实现
程序员文章站
2022-08-21 18:42:09
顺序表等相关概念请自行查阅资料,这里主要是实现。 注: 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"); }