顺序表的C语言实现

2023-10-26

头文件:SeqList.h 

#pragma once
#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
typedef int SLDataType;
typedef struct SeqList
{
    SLDataType* a;
    int size;
    int capacity;
}SL;
extern void SeqListInit(SL*);
extern void SeqListDestroy(SL*);
extern void SeqListPrint(SL*);
extern void SeqListPushFront(SL*, SLDataType);
extern void SeqListPushBack(SL*, SLDataType);
extern void SeqListPopFront(SL*);
extern void SeqListPopBack(SL*);
extern int SeqListFind(SL*, SLDataType);
extern void SeqListInsert(SL*, size_t, SLDataType);
extern void SeqListErase(SL*, size_t);
extern void SeqListModify(SL*, size_t, SLDataType);

源文件:SeqList.c

#include"SeqList.h"
void SeqListInit(SL* psl)
{
	assert(psl);
	psl->a = NULL;
	psl->capacity = psl->size = 0;
}
void SeqListDestroy(SL* psl)
{
	assert(psl);
	free(psl->a);
	psl->a = NULL;
	psl->capacity = psl->size = 0;
}
void SeqListPrint(SL* psl)
{
	assert(psl);
	for (int i = 0; i < psl->size; i++)
	{
		printf("%d ", psl->a[i]);
	}
	printf("\n");
}
void SLCheckCapacity(SL* psl)
{
	if (psl->size == psl->capacity)
	{
		int newcapacity = psl->capacity == 0 ? 4 : 2 * psl->capacity;
		SLDataType* tmp = (SLDataType*)realloc(psl->a, newcapacity * sizeof(SLDataType));
		if (tmp == NULL)
		{
			perror("realloc fail");
			exit(EXIT_FAILURE);
		}
		psl->a = tmp;
		psl->capacity = newcapacity;
	}
}
void SeqListPushFront(SL* psl, SLDataType x)
{
	assert(psl);
	SLCheckCapacity(psl);
	int end = psl->size - 1;
	while (end >= 0)
	{
		psl->a[end + 1] = psl->a[end];
		end--;
	}
	psl->a[0] = x;
	psl->size++;
}
void SeqListPushBack(SL* psl, SLDataType x)
{
	assert(psl);
	SLCheckCapacity(psl);
	psl->a[psl->size] = x;
	psl->size++;
}
void SeqListPopFront(SL* psl)
{
	assert(psl);
	assert(psl->size > 0);
	int begin = 0;
	while (begin < psl->size - 1)
	{
		psl->a[begin] = psl->a[begin + 1];
		begin++;
	}
	psl->size--;
}
void SeqListPopBack(SL* psl)
{
	assert(psl);
	assert(psl->size > 0);
	psl->size--;
}
int SeqListFind(SL* psl, SLDataType x)
{
	assert(psl);
	for (int i = 0; i < psl->size; i++)
	{
		if (psl->a[i] == x)
			return i;
	}
	return -1;
}
void SeqListInsert(SL* psl, size_t pos, SLDataType x)
{
	assert(psl);
	assert(pos <= psl->size);
	SLCheckCapacity(psl);
	//写成int i =psl->size;i>=pos 会死循环,size_t
	for (int i = psl->size; i > pos; i--)
	{
		psl->a[psl->size] = psl->a[psl->size - 1];
	}
	psl->a[pos] = x;
	psl->size++;
}
void SeqListErase(SL* psl, size_t pos)
{
	assert(psl);
	assert(pos < psl->size);
	for (int i = pos; i < psl->size - 1; i++)
	{
		psl->a[i] = psl->a[i + 1];
	}
	psl->size--;
}
void SeqListModify(SL* psl, size_t pos, SLDataType x)
{
	assert(psl);
	assert(pos < psl->size);
	psl->a[pos] = x;
}

 

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

顺序表的C语言实现 的相关文章

随机推荐

  • c++primer plus第三章复习题和编程练习

    复习题 C 为什么有多种整型 根据程序的需要选择最合适的大小 没有提供措施 程序员使用头文件limitis自己确定 33l的类型是long整型 33是默认的int整型字面量 不等价 第一条通过某种码表映射整型赋值 第二条直接赋码值 把88储
  • 【使用pandas进行数据分析】数据重构——合并与聚合、运算

    在数据清洗之后 我们可以将不同表中的数据进行合并 再进行分析 那么 数据表如何进行合并 首先 我们可以利用concat语句 import numpy as np import pandas as pd df pd read csv trai
  • 记一次vue项目优化的实例操作

    记一次vue项目优化的实例 项目前端优化是我们经常需要去做的事情 今天我们就来记录下我的实际操作 一 CDN引入 这是一个常态化的操作了 主要是让我们通过npm下载依赖包和import引入的文件 变成线上使用 减少打包后的文件大小 比如常用
  • phy芯片测试寄存器_RGMII接口调试使用VIO读取PHY寄存器值

    测试场景 测试拓扑图如下 试场景连接图 测试方法 使用TestCenter向被测板子上的千兆以太网口打流 在FPGA内部通过自回环从源端口返回给TestCenter 通过看TestCenter控制界面上显示结果判断自回环是否正确 测试RGM
  • 如何官网下载Eclipse历史版本

    1 打开官网地址http www eclipse org 点击Download 2 点击Download Packages 3 点击如下图标位置进入历史版本页面 4 根据自己需求选择版本下载即可 下面有个版本代号与版本对应表 大家自行参考
  • 开源web终端ssh解决方案

    1 首先来说一下为什么要 web ssh 许多人不是说 有了 xshell secureRT putty 等众多的 ssh 终端 为嘛还要弄个 web 的 ssh 不是够二的吗 难道是为了装像么 有个 web 的 ssh 的确没有多大作用
  • 解决win10下TensorFlow2.0/2.1出错:Loaded runtime CuDNN library: 7.5.0 but source was compiled with: 7.6.0

    解决TensorFlow2 0 2 1出现问题 Loaded runtime CuDNN library 7 5 0 but source was compiled with 7 6 0 电脑系统及CUDA版本 本人电脑win10系统 早前
  • 【科技英雄传】华为背后的任正非

    惶者才能生存 偏执才能成功 任正非 江湖中曾有这样的传闻 有一年华为的销售人员拜会边疆某地电信局领导 聊天中 对方颇多感慨 说十年前你们华为就有人来过这里 那个人背着军绿色旧书包 敲开门问我们买不买交换机 这位销售带着故事回到总部 讲给上年
  • ubuntu使用记录(4)使用xshell5连接跳板机,出现问题: “服务器发送了一个意外的数据包”received:3,expected:20...

    xshell5访问报错 服务器发送了一个意外的数据包 received 3 expected 20 1 排除了网络 防火墙等因素 2 查看sshd服务状态 3 在 etc ssh sshd config配置文件最后面添加下面一行 KexAl
  • 清华大学:人工智能之知识图谱(附PPT)

    来源 笑看国际风云 导读 知识图谱 Knowledge Graph 是人工智能重要分支知识工程在大数据环境中的成功应用 知识图谱与大数据和深度学习一起 成为推动互联网和人工智能发展的核心驱动力之一 基于此背景 人工智能之知识图谱 Resea
  • 什么是频率响应

    频率响应 系统信号的振幅和相位受频率变化而变化的特性就叫频率响应 由定义可知 频率响应由幅频特性和相频特性组成 幅频特性 表示增益的增减同信号频率的关系 相频特性 表示不同信号频率下的相位畸变关系 频率响应的作用 根据频率响应可以比较直观地
  • YARN详解(ResourceManager/ApplicationMaster/NodeManager/Container)

    一 YARN基本思想 YARN是Hadoop2 0中的资源管理系统 它的基本思想是将JobTracker的两个主要功能 资源管理和作业调度 监控 分离 主要方法是创建一个全局的ResourceManager RM 和若干个针对应用程序的Ap
  • jmeter+ant+jenkins接口自动化测试框架

    大致思路 Jmeter可以做接口测试 也能做压力测试 而且是开源软件 Ant是基于Java的构建工具 完成脚本执行并收集结果生成报告 可以跨平台 Jenkins是持续集成工具 将这三者结合起来可以搭建一套Web HTTP接口测试的持续构建环
  • 超详细的Docker常用命令演示步骤和说明

    文章目录 一 帮助命令 二 镜像命令 三 容器命令 四 常用其他命令 五 常用命令图解 六 命令练习 Docker安装Nginx Docker安装Tomcat 一 帮助命令 docker version 显示docker的版本信息 dock
  • 纹理(Textures)

    纹理 Textures 原文 Textures 作者 JoeyDeVries 翻译 Django 校对 Geequlim BLumia 我们已经了解到 我们可以为每个顶点使用颜色来增加图形的细节 从而创建出有趣的图像 但是 如果想让图形看起
  • [MysSQL8笔记]-Access denied; you need (at least one of) the PROCESS privilege(s) for this opera

    出现这个原因是 当前用户没有PROCESS权限 使用root用户给当前用户授予PROCESS权限即可 以root身份登录 root centos01 mysql uroot p Enter password Welcome to the M
  • 【无标题】

    这里写自定义目录标题 怎么清除掉Excel图表的边框线 怎么清除掉Excel图表的边框线 你好 这是你第一次使用 Markdown编辑器 所展示的欢迎页
  • 【C++刷题笔记】函数指针与仿函数:自定义排序规则

    C 刷题笔记 函数指针与仿函数 自定义排序规则 方法一 传函数指针的方式 方法二 传仿函数的方式 自带的less和greater priority queue的情况 C 中的sort函数性能十分强大 有时我们需要自定义排序方式 sort的第
  • 单片机软件系统框架和多任务调度

    这里我用的单片机算是中颖的 芯片 UART底层驱动相关函数 UART相关寄存器初始化 void Uart Init void PCON 0x00 选择SSTAT0 SCON 0x50 01000000 方式一 SBRTL u8int SBR
  • 顺序表的C语言实现

    头文件 SeqList h pragma once include