顺序表 代码实现

实现顺序表的头文件seqList.h

typedef int SLDataType;

typedef struct seqList{
	SLDataType* _data;//需要动态开辟的数组
	size_t _size;//有效元素个数
	size_t _capacity;//元素容量大小
}seqList;

void initSeqList(seqList* sl);//初始化顺序表
void push_back(seqList* sl, SLDataType val);//尾插
void checkCapacity(seqList* sl);//检查容量
void printSeqList(seqList* sl);//打印顺序表
void pop_back(seqList* sl);//尾删
void push_front(seqList* sl);//头插
void pop_front(seqList* sl);//头删
void insert(seqList* sl, size_t pos, SLDataType val);//任意位置插入
void erase(seqList* sl, int pos);//任意位置删除元素
bool empty(seqList* sl);//判断是否为空
int size(seqList* sl);//有效元素的大小
int find(seqList* sl, SLDataType val);//查找值返回位置
void destroySeqList(seqList* sl);//销毁顺序表

顺序表的代码实现

#include<stdio.h>
#include<assert.h>
#include<string.h>
#include<stdlib.h>
#include<stdbool.h>
#include"seqList.h"

//初始化顺序表
void initSeqList(seqList* sl){
	assert(sl);
	sl->_data = NULL;
	sl->_size = sl->_capacity = 0;
}

//尾插数据
void push_back(seqList* sl,SLDataType val){
	assert(sl);
	//检查容量
	checkCapacity(sl);
	sl->_data[sl->_size] = val;
	++sl->_size;
}

//检查容量
void checkCapacity(seqList* sl){
	//assert(sl);//检查指针   debug有效,release无效
	if (sl == NULL)
		return;
	if (sl->_size == sl->_capacity){
		int newCapacity = sl->_capacity == 0 ? \
			1:2 * sl->_capacity;
		sl->_data = (SLDataType*)realloc(sl->_data, sizeof(SLDataType)*newCapacity);
		
		/*
		//开空间,拷贝数据,释放原有空间
		SLDataType* tmp = (SLDataType*)\
			malloc(sizeof(SLDataType)*newCapacity);
		memcpy(tmp, sl->_data, sizeof(SLDataType)*sl->_size);
		//释放
		free(sl->_data);
		//更新
		sl->_data = tmp;
		*/
		//更新
		sl->_capacity = newCapacity;
	}
}

//打印顺序表
void printSeqList(seqList* sl){
	if (sl == NULL)
		return;
	for (int i = 0; i < sl->_size; ++i){
		printf("%d ", sl->_data[i]);
	}
	printf("\n");
}

//尾删
void pop_back(seqList* sl){
	if (sl == NULL)
		return;
	if (sl->_size>0)
	--(sl->_size);
}

//头插
void push_front(seqList* sl,SLDataType val){
	if (sl == NULL)
		return;
	checkCapacity(sl);//1.
	int end = sl->_size;//2.移动元素
	while (end>0){
		sl->_data[end] = sl->_data[end - 1];
		--end;
	}
	sl->_data[0] = val;//3.头插
	++sl->_size;//4.更新
}

//头删
void pop_front(seqList* sl){
	if (sl == NULL)
		return;
	//0.判断
	if (sl->_size == 0)
		return;
	//1.移动
	int start = 1;
	while (start < sl->_size){
		sl->_data[start - 1] = sl->_data[start];
		++start;
	}
	//2.更新
	--(sl->_size);
}

void insert(seqList* sl, size_t pos, SLDataType val){
	if (sl == NULL) return;
	//1.检查容量
	if (pos >= 0 && pos <= sl->_size){
		checkCapacity(sl);
		//2.移动数据[pos,sl->_size)
		int end = sl->_size;
		while (end > pos){
			sl->_data[end] = sl->_data[end - 1];
			end--;
		}
		//3.插入数据
		sl->_data[pos] = val;
		//4.更新
		++(sl->_size);
	}
}

//任意位置删除元素
void erase(seqList* sl, int pos){
	if (sl == NULL || sl->_size == 0)
		return;
	//1.检查位置[0,sl->_size)
	if (pos >= 0 && pos < sl->_size){
		//2.移动元素
		int start = pos;
		while (start<(sl->_size-1)){
			sl->_data[start] = sl->_data[start + 1];
			start++;
		}
		//3.更新
		--(sl->_size);
	}
}

//判断是否为空
bool empty(seqList* sl){
	if (sl == NULL || sl->_size == 0)
		return true;
	else
		return false;
}

//有效元素的大小
int size(seqList* sl){
	if (sl == NULL)
		return 0	;
	return sl->_size;
}

//查找值返回位置
int find(seqList* sl, SLDataType val){
	if (sl == NULL)
		return 0;
	int i = 0;
	for (; i < sl->_size; ++i){
		if (sl->_data[i] == val)
			return i;
	}
	return -1;
}

//销毁顺序表
void destroySeqList(seqList* sl){
	if (sl == NULL)
		return;
	if (sl->_data){
		free(sl->_data);
		sl->_data = NULL;
	}
}

测试案例

//测试
void test(){
	seqList sl;
	initSeqList(&sl);

}
/*
void test(){
	seqList sl;
	initSeqList(&sl);
	push_back(&sl, 1);
	push_back(&sl, 2);
	push_back(&sl, 3);
	push_back(&sl, 4);
	push_back(&sl, 5);
	printSeqList(&sl);//1 2 3 4 5

	erase(&sl, 0); printSeqList(&sl);//2 3 4 5
	erase(&sl, 7); printSeqList(&sl);//2 3 4 5 
	erase(&sl, 3); printSeqList(&sl);//2 3 4 
	erase(&sl, 0); printSeqList(&sl);//3 4
	erase(&sl, 2); printSeqList(&sl);//3 4
	erase(&sl, 1); printSeqList(&sl);//3


}

void test(){
	seqList sl;
	initSeqList(&sl);
	insert(&sl, 0, 1);
	printSeqList(&sl);
	insert(&sl, 1, 2);
	printSeqList(&sl);
	insert(&sl, 0, 0);
	printSeqList(&sl);
	//insert(&sl, 2, 0.5);
	printSeqList(&sl);
	insert(&sl, 3, 9);
	//insert(&sl, 7, 9);
	printSeqList(&sl);

}

void test(){
	seqList sl;
	initSeqList(&sl);
	push_back(&sl, 1);
	push_back(&sl, 2);
	push_back(&sl, 3);
	push_back(&sl, 4);
	push_back(&sl, 5);

	printSeqList(&sl);

	pop_front(&sl);
	pop_front(&sl);
	pop_front(&sl);
	pop_front(&sl);
	printSeqList(&sl);
	pop_front(&sl);
	pop_front(&sl);
	printSeqList(&sl);

}

void test(){
	seqList sl;
	initSeqList(&sl);
	push_front(&sl, 9);
	printSeqList(&sl);
	push_front(&sl, 8);
	printSeqList(&sl);
	push_front(&sl, 7);
	printSeqList(&sl);
	push_front(&sl, 6);
	printSeqList(&sl);
	push_front(&sl, 5);
	printSeqList(&sl);

}

void test(){
	seqList sl;
	initSeqList(&sl);
	push_back(&sl, 1);
	push_back(&sl, 2);
	push_back(&sl, 1);
	push_back(&sl, 3);
	push_back(&sl, 4);
	printSeqList(&sl);
	pop_back(&sl);
	printSeqList(&sl);
	
}
*/
int main(){
	test();
	system("pause");
	return 0;
}
安装Docker安装插件,可以按照以下步骤进行操作: 1. 首先,安装Docker。可以按照官方文档提供的步骤进行安装,或者使用适合您操作系统的包管理器进行安装。 2. 安装Docker Compose插件。可以使用以下方法安装: 2.1 下载指定版本的docker-compose文件: curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose 2.2 赋予docker-compose文件执行权限: chmod +x /usr/local/bin/docker-compose 2.3 验证安装是否成功: docker-compose --version 3. 在安装插件之前,可以测试端口是否已被占用,以避免编排过程中出错。可以使用以下命令安装netstat并查看端口号是否被占用: yum -y install net-tools netstat -npl | grep 3306 现在,您已经安装Docker安装Docker Compose插件,可以继续进行其他操作,例如上传docker-compose.yml文件到服务器,并在服务器上安装MySQL容器。可以参考Docker的官方文档或其他资源来了解如何使用DockerDocker Compose进行容器的安装和配置。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Docker安装docker-compose插件](https://blog.youkuaiyun.com/qq_50661854/article/details/124453329)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [Docker安装MySQL docker安装mysql 完整详细教程](https://blog.youkuaiyun.com/qq_40739917/article/details/130891879)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值