顺序表等相关概念请自行查阅资料,这里主要是实现。
注:
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 addElement(STABLE* pTable, int iElement); void delElement(STABLE* pTable); 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 = NULL; pTable->m_iSize = 0; pTable->m_iCapacity = 0; 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 addElement(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 delElement(STABLE* pTable) { if(!pTable || !pTable->m_pHead) { printf("顺序表不存在!\n"); return; } if(pTable->m_iSize < 1) { printf("顺序表元素个数为0!\n"); return; } pTable->m_iSize--; }
打印所有元素。
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"); }