顺序表的创建与使用

2023-05-16

顺序表的创建与使用

这里还定义了一个数据类型的宏,TYPE。

首先需要设计数据结构,这里设计了两个成员:数组首地址和元素个数。

然后是进行各种业务功能的分函数:创建顺序表、销毁顺序表、访问顺序表中指定下标的元素、在顺序表中查找指定元素、对顺序表排序、遍历打印顺序表、删除顺序表中指定下标的元素、在顺序表中指定下标插入元素等。

具体业务实现如下:

创建:malloc先后创建两个空间
销毁:free先后销毁两个空间
访问:判断下标合法后即可返回存储的元素
查找:循环判断表中的元素是否相等,找到后返回下标,若查找不到则返回-1
排序:对元素进行排序
遍历:循环打印
删除:判断下标合法后将index后面的元素向前移,覆盖掉原元素
插入:判断下标合法后将index空出,循环从后往前将元素后移,跳出循环后再给index位赋值

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define TYPE int

// 设计数据结构
typedef struct Array
{
	TYPE* base; 	// 数组首地址
	size_t size;	// 元素的个数
}Array;

// 创建
Array* create_array(size_t len)
{
	Array* arr = malloc(sizeof(Array));
	arr->base = malloc(sizeof(TYPE)*len);
	arr->size = len;
	return arr;
}

// 销毁
void destory_array(Array* arr)
{
	free(arr->base);
	free(arr);
}

// 访问
TYPE* access_array(Array* arr,int index)
{
	if(index < 0 || index >= arr->size) return NULL;
	return arr->base + index;
}

// 查找
int find_array(Array* arr,TYPE data)
{
	for(int i=0; i<arr->size; i++)
	{
		if(data == arr->base[i])
			return i;
	}

	return -1;
}

// 排序
void sort_array(Array* arr)
{
	for(int i=0; i<arr->size-1; i++)
	{
		for(int j=i+1; j<arr->size; j++)
		{
			if(arr->base[i] > arr->base[j])
			{
				TYPE temp = arr->base[i];
				arr->base[i] = arr->base[j];
				arr->base[j] = temp;
			}
		}
	}
}

// 遍历
void show_array(Array* arr)
{
	 for(int i=0; i<arr->size; i++)
	 {
		printf("%d ",arr->base[i]);
	 }
	 printf("\n");
}

// 删除
bool delete_array(Array* arr,int index)
{
	if(index < 0 || index >= arr->size) return false;
	for(int i=index; i<arr->size-1; i++)
	{
		arr->base[i] = arr->base[i+1];
	}
	return true;
}

// 插入
bool insert_array(Array* arr,int index,TYPE data)
{
	if(index < 0 || index >= arr->size) return false;
	for(int i=arr->size-1; i>index; i--)
	{
		arr->base[i] = arr->base[i-1];
	}
	arr->base[index] = data;
	return true;
}

int main()
{
	Array* arr = create_array(20);
	for(int i=0; i<100; i++)
	{
		TYPE* p = access_array(arr,i);
		if(NULL != p) 
			*access_array(arr,i) = rand() % 100;
	}
	show_array(arr);//遍历显示顺序表
	sort_array(arr);//顺序表排序
	show_array(arr);
	printf("find index = %d\n",find_array(arr,86));//查找
	delete_array(arr,15);//删除
	delete_array(arr,15);
	printf("find index = %d\n",find_array(arr,86));
	show_array(arr);
	insert_array(arr,10,86);//指定位置下标插入元素
	printf("find index = %d\n",find_array(arr,86));
	show_array(arr);
	destory_array(arr);
}

程序运行结果如下:
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

顺序表的创建与使用 的相关文章

  • HTTP协议

    HTTP协议 常用的HTTP方法HTTP请求报文与响应报文格式常见的HTTP相应状态码常见HTTP首部字段GET方法与POST方法的区别HTTP的缺点与HTTPSHTTP优化 HTTP xff08 超文本传输协议 xff09 是一个基于请求
  • debian10安装apache2 php ftp(网站服务器)

    debian安装网站服务 debian最小安装后重启机器 设置语言 dpkg reconfigure locales 选择en US UTF 8 UTF 8 xff08 其它都不选 xff09 重启机器 修改软件安装源文件 xff08 如果
  • 正则表达式(转载)

    正则表达式的基本语法 开始和结尾位置声明 表示字符串的开始 xff0c 要匹配 本身需要使用 例如 xff1a Yao 表示字符串以 Yao 开头 表示字符串的结尾 xff0c 要匹配 本身需要使用 例如 xff1a Yao 表示字符串以
  • apache2网站设置

    apache2网站设置 我们访问一个网址是先解析成对应的IP的80端口开始的 打开apache2网站配置文件 nano etc apache2 sites available 000 default conf 可以看到 lt Virtual
  • apache用户名和密码验证

    apache用户名和密码验证 之前建立的www soft com这个网站我们给他加个访问验证 修改 etc apache2 apache2 conf nano etc apache2 apache2 conf 把 lt Directory
  • php安装swoole插件

    swoole插件 安装wget apt install wget 安装openssl apt install openssl xff08 https要用到 安装phpize apt install php7 3 dev 安装make apt
  • 五:debian安装,附加审批系统

    如果你还没读第一篇和第二篇请阅读第一篇Debian 安装和第二篇Debian 服务器安装 服务器开始安装审批系统 wget c https jiaozhiguan 1258621244 cos ap guangzhou myqcloud c
  • SpringBoot项目的出现java.io.FileNotFoundException: (系统找不到指定的路径。)

    项目场景 xff1a SpringBoot项目的出现java io FileNotFoundException 系统找不到指定的路径 项目场景 xff1a Springboot用到文件上传下载功能 问题描述 xff1a 问题 xff1a j
  • mysql创建用户报错[Err] 1396 - Operation CREATE USER failed for ‘用户名‘@‘%‘的解决方法

    项目场景 xff1a 执行mysql创建用户语句CREATE USER test IDENTIFIED BY 用户名 问题描述 xff1a 执行mysql创建用户语句CREATE USER test IDENTIFIED BY 39 用户名
  • 解决nginx提示:(code=exited, status=203/EXEC)的错误

    项目场景 xff1a 在centos7上启动nginx1 19 安装过程省略 问题描述 xff1a 编译安装一切顺利 xff0c 使用systemctl start nginx时提示如下内容 xff1a span class token p
  • You don‘t have permission to access this resource.

    项目场景 xff1a 访问自己的搭建的网站时apache报错You don t have permission to access this resource 原因分析 遇到如标题那个问题 xff0c 无法进行远程HTTP请求 解决方案 x
  • cmd下windows批处理bat,获取当前系统时间,生成日志文件名

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 目录 Window系统一 范例二 方法详解1 获取日期2 获取时间3 详解 总结更多 关于Linux的写法 Window系统 常用的Win
  • Centos 7 SSH服务安全加固

    描述 禁止SSH空密码用户登录 xff0c 限制可登录用户及来源地址 加固建议 编辑文件 etc ssh sshd config xff0c 将一应配置修改 具体操作命令和步骤 1 编辑文件 etc ssh sshd config vim
  • 第18章 异常处理

    问题 xff1a c 43 43 异常处理是不是必须有try xff0c 才能有catch 下面自己验证下 方法1 xff1a 如果没有try catch语句块能不能处理异常 xff1f include lt string gt inclu
  • Centos7十五项安全加固标准配置(结合等保3)

    写在前面 xff1a 由于所有操作均涉及系统文件 xff0c 建议所有操作前备份文件及做好相关记录 一 检查系统空密码账户 身份鉴别 描述 检查是否存在空口令和root权限的账号 加固建议 对无口令并且可登录的账户 xff0c 进行密码设置
  • ThinkPHP下 自定义日志输出

    项目场景 xff1a 不想调用TP的 think Log类工具 xff0c 而是自定义日志的输出路径 文件名和内容 xff1a 解决方案 xff1a 提示 xff1a 这里填写该问题的具体解决方案 xff1a 1 首先在common php
  • Ubuntu下代理设置方法

    Ubuntu下代理设置方法 一 临时的手段 在命令行中临时设置 xff0c export http proxy 61 34 http username password 64 proxyIP proxyPort 34 xff0c 和其他临时
  • 缓解pandas中DataFrame占用内存过大的问题

    本文最后修改于2018 01 21 xff0c 文章有问题或者转载请及时联系本人 xff0c 如果对你有帮助 xff0c 别忘了点下关注 0 背景 在我们使用pandas进行数据处理的时候 xff0c 有时候发现文件在本地明明不大 xff0
  • “智医助理”噱头>实用性?详解科大讯飞医疗新布局

    关注52AI xff0c 做AI的行业领先者 QQ人工智能行业交流群 xff1a 626784247 01 以456分通过执医考试的 智医助理 xff0c 真的能够用于临床辅助诊断吗 xff1f 在国际权威的肺结节检测大赛LUNA16中刷新

随机推荐