1、顺序表的创建
#define SeqListMaxSize 1000
typedef char SeqType;
typedef struct SeqList {
SeqType data[SeqListMaxSize];
size_t size;
} SeqList;
2、增删查改函数
1、头插尾插:
void SeqListPushBack(SeqList* seq, SeqType value){
assert(seq);
if (seq->size >= SeqListMaxSize){
return;
}
seq->data[seq->size] = value;
seq->size++;
}
void SeqListPushFront(SeqList* seq, SeqType value){
assert(seq);
if (seq->size >= SeqListMaxSize){
return;
}
size_t i = seq->size;
for (; i > 0; --i){
seq->data[i + 1] = seq->data[i];
}
seq->data[1] = seq->data[0];//注意当i=0时,要将第一个元素放到第二个元素那里
seq->data[0] = value;
++seq->size;
}
2、任意位置插入元素
void SeqListInsert(SeqList* seq, size_t pos, SeqType value){
assert(seq);
if (seq->size >= SeqListMaxSize){
return;
}
if (pos > seq->size){
return;
}
++seq ->size;
size_t i = seq->size - 1;
for (; i > pos; --i){
seq->data[i] = seq->data[i - 1];
}
seq ->data[pos] = value;
}
3、删除指定元素(Erase)、删除给定的值(Remove)
void SeqListErase(SeqList* seq, size_t pos){
assert(seq);
if (pos >=seq->size){
return;
}
if (seq->size == 0){
return;
}
size_t i = pos;
for (; i < seq->size - 1; ++i){
seq->data[i] = seq->data[i + 1];
}
--seq->size;
/*if (pos == 0){
SeqListPopFront(&seq);
}
else if (pos == seq->size - 1){
SeqListPopBack(&seq);
}
else{*/ //下面的的循环已经考虑了头删尾删以及其他位置删除的情况
}
void SeqListRemove(SeqList* seq, SeqType to_delete){
assert(seq);
size_t pos = SeqListFind(seq, to_delete);
if (pos ==(size_t)-1){
return;
}
SeqListErase(seq, pos);
}
4、查改
size_t SeqListFind(SeqList* seq, SeqType value){
assert(seq);
size_t i = 0;
for (; i < seq->size; ++i){
if (seq->data[i] == value){
return i;
}
}
return (size_t)-1;
}
void SeqListSet(SeqList* seq, size_t pos, SeqType value){
assert(seq);
if (pos < seq->size){
seq->data[pos] = value;
}
return;
}
SeqList.h文件:
#pragma once
#include<stddef.h>
#define SeqListMaxSize 1000
typedef char SeqType;
typedef struct SeqList {
SeqType data[SeqListMaxSize];
size_t size;
} SeqList;
/**
* @brief 给一个顺序表进行初始化
*
* @param seq 表示一个顺序表结构的指针
*/
void SeqListInit(SeqList* seq);
/**
* @brief 将一个元素插入到顺序表的末尾
*
* @param seq 顺序表结构的指针
* @param value 新插入的值
*/
void SeqListPushBack(SeqList* seq, SeqType value);
/**
* @brief 将顺序表的最后一个元素删除
*
* @param seq 顺序表结构的指针
*/
void SeqListPopBack(SeqList* seq);
/**
* @brief 往顺序表的前面插入一个元素
*
* @param seq 顺序表结构的指针
* @param value 新插入的值
*/
void SeqListPushFront(SeqList* seq, SeqType value);
/**
* @brief 删除顺序表的第一个元素
*
* @param seq 顺序表结构的指针
*/
void SeqListPopFront(SeqList* seq);
/**
* @brief 取顺序表中任意位置的一个元素
*
* @param seq 顺序表的指针
* @param pos 要取的元素的下标
* @param default_value 如果取元素失败, 就返回这个值
*
* @return 对应下标位置的元素的值
*/
SeqType SeqListGet(SeqList* seq, size_t pos, SeqType default_value);
/**
* @brief 将顺序表中指定位置的值进行设置
*
* @param seq 顺序表的结构指针
* @param pos 要修改的顺序表的元素位置
* @param value 要设置的值.
*/
void SeqListSet(SeqList* seq, size_t pos,SeqType value);
/**
* @brief 查找顺序表中指定元素的下标
*
* @param seq 顺序表结构指针
* @param value 要查找的值
*
* @return 对应值的下标. 如果找不到, 就返回
* (size_t)-1
*/
size_t SeqListFind(SeqList* seq, SeqType value);
/**
* @brief 在指定位置插入元素
*
* @param seq 顺序表指针
* @param pos 要插入的位置
*