实现顺序表的以下操作
#pragma once
#include
#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 要插入的位置
* @param value 要插入的值.
*/
void SeqListInsert(SeqList* seq, size_t pos,
SeqType value);
/**
* @brief 删除指定位置的元素
*
* @param seq 顺序表指针
* @param pos 要删除的元素位置
*/
void SeqListErase(SeqList* seq, size_t pos);
/**
* @brief 删除顺序表中指定的值, 如果存在重复元素, 只删除第一个
*
* @param seq 顺序表指针
* @param to_delete 待删除的值
*/
void SeqListRemove(SeqList* seq, SeqType to_delete);
/**
* @brief 删除顺序表中所有的指定的值, 另外要实现一个时间复杂度为 O(N) 的优化版本
*
* @param seq 顺序表指针
* @param to_delete 待删除的元素
*/
void SeqListRemoveAll(SeqList* seq, SeqType to_delete);
/**
* @brief 获取顺序表元素个数
*
* @param seq 顺序表指针
*
* @return 顺序表元素的个数
*/
size_t SeqListSize(SeqList* seq);
/**
* @brief 判定顺序表是否为空
*
* @param seq 顺序表指针
*
* @return 如果顺序表为空, 返回 1; 否则返回 0
*/
int SeqListEmpty(SeqList* seq);
/**
* @brief 冒泡排序
*
* @param seq 顺序表指针
*/
void SeqListBubbleSort(SeqList* seq);
/**
* @brief 冒泡排序
*
* @param seq 顺序表指针
*/
void SeqListBubbleSortEx(SeqList* seq, int (*cmp)(SType , SType));
#include<stdio.h>
#include"seqlist.h"
void SeqlistInit(Seqlist *seqlist){
if (seqlist == NULL)
return;
Seqlist->size=0;
}
void SeqlistPuchBack(Seqlist *seqlist,SeqlistType value){
if (seqlist == NULL)
return;
if(Seqlist->size >= SeqlistMaxSize)
return;
Seqlist->data[Seqlist->size] == value;
++Seqlist->size;
}
void SeqlistPopBack(Seqlist *seqlist){
if (seqlist == NULL)
return;
if (Seqlist->size == 0)
ruturn ;
--Seqlist->size;
}
void SeqlistPushFront(Seqlist *seqlist,SeqlistType value){
if (seqlist == NULL)
return;
if (Seqlist->size >= SeqlistMaxSize)
return;
++Seqlist->size;
size_t i=Seqlist->size -1;
for(;i>0;--i){
Seqlist->data[i]=Seqlist->data[i-1];
}
Seqlist->data[0]=value;
}
void SeqlistPopFront(Seqlist *seqlist){
if (seqlist == NULL)
return;
if (Seqlist->size == 0)
return ;
size_t i = 0;
for(;i<Seqlist->size-1;++i){
Seqlist->data[i]=Seqlist->data[i+1];
}
void SeqlistGet(Seqlist *seqlist,size_t pos){
if (seqlist == NULL)
return;
if (pos >= Seqlist->size)
return -1;
return Seqlist->data[pos];
}
void SeqlistSet(Seqlist *seqlist,size_t pos, SeqlistType *value){
if (seqlist == NULL)
return;
if (pos >= Seqlist->size)
return;
Seqlist->data[pos]=*value;
}
void SeqlistFind(Seqlist *seqlist.SeqlistType value){
if (seqlist == NULL)
return;
size_t i=0;
for(;i<Seqlist->size;i++){
if (Seqlist->data[i] == value)
return i;
}
return -1;
}
void SeqlistInsert(Seqlist *seqlist,size_t pos, SeqlistType value){
if (seqlist == NULL)
return;
if (pos > Seqlist->size)
return;
if(Seqlist->size>=SeqlistMaxSize)
return;
if(Seqlist->size == 0)
SeqlistPushFront(seqlist,value);
++Seqlist->size;
size_t i=Seqlist->size-1;
for(;i>=pos;--i){
Seqlist->data[i]=Seqlist->data[i-1];
}
Seqlist->data[pos]=value;
}
void SeqlistErase(Seqlist *seqlist,size_t pos){
if(seqlist == NULL)
return;
if(pos >= Seqlist->size)
return;
size_t i =pos;
for(;i<Seqlist->size-1;++i){
Seqlist->data[i]=Seqlist->data[i+1];
}
--Seqlist->size;
}
void SeqlistRemove(Seqlist *seqlist.SeqlistType to_delete){
if(seqlist == NULL)
return;
size_t pos=SeqlistFind(seqlist,to_delete);
if (pos == -1)
return;
SeqlistErase(seqlist,pos);
}
void SeqlistRemoveAll(Seqlist *seqlist,SeqlistType to_delete){
if(seqlist == NULL)
return;
size_t i=Seqlist->size;
size_t j=0;
size_t pos=0;
size_t to_delete_pos[i]=[];
while(1){
pos=SeqlistFind(seqlist.to_delete);
if(pos == -1)
break;
else
to_delete_pos[j]=pos;
j++;
}
for(;j>0;--j){
SeqlistErase(seqlist.*to_delete_pos[j]);
}
}
size_t SeqlistSize(Seqlist *seqlist){
if (seqlist == NULL)
return;
return Seqlist->size;
}
int SeqlistEmpty(Seqlist *seqlist){
if (seqlist == NULL)
return;
if(Seqlist->size == 0)
return 1;
else
return 0;
}
void SeqlistBubbleSort(Seqlist *seqlist){
if (seqlist == NULL)
return;
size_t count = 0;
size_t temp;
for(;count<Seqlist->size;count++){
for(size_t cur=0;count<Seqlist->size-cur-1;cur++){
if(Seqlist->data[count]>Seqlist->data[cur])
temp=Seqlist->data[count];
Seqlist->data[data]=Seqlist->data[cur];
Seqlist->data[cur]=temp;
}
}
}
BubbleSoryEx TODO