采用多文件形式,运行环境VS2013
1.头文件
SeqList.h
#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#define N 10
typedef int SLDataType;
// 顺序表的动态存储
typedef struct SeqList
{
SLDataType* array; // 指向动态开辟的数组
size_t size; // 有效数据个数
size_t capicity;// 容量空间的大小
}SeqList;
// 基本增删查改接口
// 顺序表初始化
void SeqListInit(SeqList* psl, size_t capacity);
// 检查空间,如果满了,进行增容
void CheckCapacity(SeqList* psl);
// 顺序表尾插
void SeqListPushBack(SeqList* psl, SLDataType x);
// 顺序表尾删
void SeqListPopBack(SeqList* psl);
// 顺序表头插
void SeqListPushFront(SeqList* psl, SLDataType x);
// 顺序表头删
void SeqListPopFront(SeqList* psl);
// 顺序表查找
int SeqListFind(SeqList* psl, SLDataType x);
// 顺序表在pos位置插入x
void SeqListInsert(SeqList* psl, size_t pos, SLDataType x);
// 顺序表删除pos位置的值
void SeqListErase(SeqList* psl, size_t pos);
// 顺序表销毁
void SeqListDestory(SeqList* psl);
// 顺序表打印
void SeqListPrint(SeqList* psl);
2.源文件
SeqList.c
#include"SeqList.h"
// 顺序表初始化
void SeqListInit(SeqList* psl, size_t capacity){
psl->array = (SLDataType*)malloc(capacity*sizeof(SLDataType));
assert(psl->array);
psl->capicity = capacity;
psl->size = 0;
}
// 检查空间,如果满了,进行增容
void CheckCapacity(SeqList* psl){
if (psl ->size == psl->capicity)
{
size_t newcapacity = psl ->capicity * 2;
psl->array = (SLDataType*)realloc(psl->array, newcapacity*sizeof(SLDataType));
psl->capicity = newcapacity;
}
}
// 顺序表尾插
void SeqListPushBack(SeqList* psl, SLDataType x){
assert(psl);
CheckCapacity(psl);
psl->array[psl->size]= x;
psl->size++;
}
// 顺序表尾删
void SeqListPopBack(SeqList* psl){
assert(psl);
if (0==psl->size){
return;
}
else
psl->size--;
}
// 顺序表头插
void SeqListPushFront(SeqList* psl, SLDataType x){
assert(psl);
CheckCapacity(psl);
for (int i = psl->size-1; i >=0; --i){
psl->array[i + 1] = psl->array[i];
}
psl->array[0] = x;
psl->size++;
}
// 顺序表头删
void SeqListPopFront(SeqList* psl){
if (0 == psl->size)
return;
for (int i = 0; i < psl->size-1; ++i){
psl->array[i] = psl->array[i + 1];
}
psl->size--;
}
// 顺序表在pos位置插入x
void SeqListInsert(SeqList* psl, size_t pos, SLDataType x){
assert(psl);
CheckCapacity(psl);
if (pos==1)
{
SeqListPushFront(psl, x);
}
else{
for (int i = psl->size - 1; i >= pos - 1; --i){
psl->array[i + 1] = psl->array[i];
}
psl->array[pos - 1] = x;
psl->size++;
}
}
// 顺序表删除pos位置的值
void SeqListErase(SeqList* psl, size_t pos){
assert(psl);
CheckCapacity(psl);
if (pos == 1)
{
SeqListPopFront(psl);
}
else{
if (pos > psl->size){
return;
}
else{
for (int i = pos - 1; i < psl->size; ++i){
psl->array[i] = psl->array[i + 1];
}
psl->size--;
}
}
}
// 顺序表查找
int SeqListFind(SeqList* psl, SLDataType x){
assert(psl);
if (psl->array == NULL)
return;
for (int i = 0; i < psl->size - 1; ++i){
if (psl->array[i] == x){
printf("%d\n", i);
}
}
}
// 顺序表打印
void SeqListPrint(SeqList* psl){
assert(psl);
for (int i = 0; i < psl->size; ++i){
printf("%d ", psl->array[i]);
}
printf("\n");
}
//销毁顺序表
void SeqListDestory(SeqList* psl){
assert(psl);
free(psl ->array);
psl->array = NULL;
psl->size = psl->capicity = 0;
}
test.c
#include"SeqList.h"
int test()
{
SeqList psl;//初始化,必须要有
//SeqListInit(&psl, N);
//SeqListPushBack(&psl, 1);
//SeqListPushBack(&psl, 2);
//SeqListPushBack(&psl, 3);
//SeqListPushBack(&psl, 4);
//SeqListPushBack(&psl, 5);
//SeqListPopBack(&psl, 6);
//SeqListInsert(&psl, 1, 510);
//SeqListErase(&psl,10 );
SeqListPrint(&psl);//打印顺序表
SeqListDestory(&psl);//销毁,必须有,防止内存泄露
}
int main(){
test();
system("pause");
return 0;
}