作者:草业学院16级草坪1班团支部s_b9w | 来源:互联网 | 2023-09-09 19:50
seqList.h
#pragma once
#include
#define INIT_SEQLIST_SIZE 8 //顺序表初始大小
typedef int Data; //抽象数据类型ADT//数组 容量(最多能存储多少个元素) 当前大小
typedef struct SeqList //顺序表结构
{Data* base; //指向动态内存分配的数组的指针int capacity; //容量int size; //当前元素个数
}SeqList;//初始化顺序表
void initList(SeqList*list);//获取大小
int size(SeqList* list);//是否为空
bool empty(SeqList* list);//尾部插入
void push_back(SeqList* list,const Data* const pval);//删除最后一个元素
void pop_back(SeqList* list);
//删除指定的元素
void removeOne(SeqList* list, const Data* const pval);//查找元素,返回下标
int find_pos(SeqList* list, const Data* const pval);
//查找元素,返回元素地址
Data* find_val(SeqList* list, const Data* const pval);//回调登记函数
typedef void (*CallBack)(Data* pval);
void transform(SeqList* list, CallBack dosomething);
seqList.c
#include"seqList.h"
#include
#include
void initList(SeqList* list)
{list->capacity = INIT_SEQLIST_SIZE;list->size = 0;list->base = (Data*)calloc(list->capacity, sizeof(Data));if (!list){puts("内存申请失败~");return;}
}int size(SeqList* list)
{return list->size;
}bool empty(SeqList* list)
{return list->size == 0;
}void push_back(SeqList* list, const Data* const pval)
{//判断顺序表有没有位置(是否已满)if (list->size == list->capacity){puts("顺序表已满,无法插入~");return;}list->base[list->size] = *pval; //插入list->size++; //元素个数加1
}void pop_back(SeqList* list)
{if(!empty(list))list->size--;
}void removeOne(SeqList* list, const Data* const pval)
{if (empty(list)) //为空直接返回,无需删除return;//先找到pval,需要下标还是元素地址int delPos = find_pos(list, pval);if (delPos == -1){return;}//开始删除元素(把要删除的元素后面的元素都往前挪动)for (int i = delPos; i size-1 ; i++){list->base[i] = list->base[i + 1];}//size-1list->size--;
}int find_pos(SeqList* list, const Data* const pval)
{for (int i = 0; i size; i++){if (list->base[i] == *pval){return i;}}return -1;
}Data* find_val(SeqList* list, const Data* const pval)
{for (int i = 0; i size; i++){if (list->base[i] == *pval){return list->base + i;}}return NULL;
}void transform(SeqList* list, CallBack dosomething)
{for (int i = 0; i size; i++){dosomething(list->base + i);}
}
main.c
#include
#include"seqList.h"
/*
* 顺序表:线性表的一种,每个元素都是连续的,内存连续(数组)
*
*/ void print(Data* pval)
{printf("%d ",*pval);
}int main(){SeqList list = {0};initList(&list);//插入数据for (int i = 0; i }