顺序表的动态实现

文章目录

  • 静态顺序表和动态顺序表的异同
  • 动态顺序表的实现
      • 头文件
      • 定义结构体
      • 初始化
      • 打印顺序表
    • 实现增删查改
      • 尾插
      • 头插
      • 尾删
      • 头删
      • 删掉某个位置的数据
      • 在某个位置插入数据
      • 查找某个位置的下标
      • 修改某个位置的数据
      • 扩容
      • 销毁顺序表

静态顺序表和动态顺序表的异同

相同:
内存空间连续,数据顺序存储
占用内存空间不同
静态顺序表是在栈上开辟的,随着函数调用的结束,系统会自动回收内存,不存在内存泄漏
动态顺序表是在堆区开辟内存,实现动态内存管理,根据你的需求去开辟

动态顺序表的实现

头文件

#include<stdio.h>
#include <string.h>
#include<stdlib.h>
#include<assert.h>

定义结构体

注意命名方式,采用驼峰法
结构体里包含要插入的数据,计数器,容量大小(开辟空间)
宏定义有利于管理代码

#define N 10
typedef int SQDataType;
struct SeqList
{SQDataType* a;int sz;int capacity;};

初始化

void SeqListInit(SL* s1)
{s1->a = NULL;s1->sz = 0;s1->capacity = 0;//0*2还是0}

打印顺序表

void SeqListPrint(SL* s1)
{for (int i = 0; i < s1->sz; i++){printf("%d ", s1->a[i]);}printf("\n");
}
在这里插入代码片

实现增删查改

尾插

void SeqListPushBack(SL* s1, SQDataType x)
{SeqListCheckCapacity(s1);//判断是否需要扩容s1->a[s1->sz] = x;s1->sz++;
}

头插

void SeqListPushFront(SL* s1, SQDataType x)
{SeqListCheckCapacity(s1);int end = s1->sz - 1;while (end >= 0){s1->a[end + 1] = s1->a[end];end--;}s1->a[0] = x;s1->sz++;}

尾删

void SeqListPopBack(SL* s1)
{assert(s1->sz > 0);s1->sz--;
}

头删

void SeqListPopFront(SL* s1)
{assert(s1->sz > 0);int start = 1;//计录while (start < s1->sz){s1->a[start - 1] = s1->a[start];   start++;}s1->sz--;
}

删掉某个位置的数据

void SeqListRemove(SL* s1, int pos) 
{assert(pos < s1->sz);int start = pos + 1;while (start < s1->sz){s1->a[start - 1] = s1->a[start];start++;}s1->sz--;
}

在某个位置插入数据

void SeqListInsert(SL* s1,int pos, SQDataType x)
{assert(pos < s1->sz);SeqListCheckCapacity(s1);int end = s1->sz - 1;while (end >= pos){s1->a[end + 1] = s1->a[end];--end;}s1->a[pos] = x;s1->sz++;
}

查找某个位置的下标

int SeqListFind(SL* s1, SQDataType x)
{for (int i = 0; i < s1->sz; i++){if (s1->a[i] == x)return i;}return -1;}

修改某个位置的数据

void SeqListModity(SL* s1, int pos, SQDataType x)
{assert(pos < s1->sz);s1->a[pos] = x;
}

扩容

void SeqListCheckCapacity(SL* s1)
{if (s1->sz == s1->capacity){int newcapacity = s1->capacity == 0 ? 4 : s1->capacity * 2;SQDataType* tmp = (SQDataType*)realloc(s1->a, newcapacity * sizeof(SQDataType));if (tmp == NULL){printf("realloc is fail\n");exit(-1);}else{s1->a = tmp;s1->capacity = newcapacity;}}
}

销毁顺序表

void SeqListDestory(SL* s1)
{free(s1->a);s1->sz = s1->capacity = 0;s1->a = NULL;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/794270.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue项目登录页实现获取短信验证码的功能

之前我们写过不需要调后端接口就获取验证码的方法,具体看《无需后端接口,用原生js轻松实现验证码》这个文章。现在我们管理后台有个需求,就是登录页面需要获取验证码,用户可以输入验证码后进行登录。效果如下,当我点击获取验证码后能获取短信验证码: 这里在用户点击获取…

C# 委托与事件 深入

委托委托最大的好处委托的第二个作用就是可以多播泛型委托预定义的委托*EventHandler 委托&#xff1a;* 事件事件就是一种特殊的委托举个例子微软为我们提供了标准事件模式 委托 这是一个简单的委托样例 class TODO {public static void Main(String[] args) {Cal aa new C…

Linux 线程:线程同步、生产者消费者模型

目录 一、死锁 二、条件变量实现线程同步 1、为什么需要线程同步 2、条件变量、同步、竞态条件 3、条件变量函数&#xff1a;初始化 销毁 等待 唤醒 4、实现简单的多线程程序 不唤醒则一直等待 实现线程同步 三、生产者消费者 1、借助超市模型理解 2、优点 四、基于…

Java基础知识总结(39)

1、今天学了什么 &#xff08;1&#xff09;构造器 构造器的定义&#xff1a; 需要注意的是构造器是一种特殊的方法&#xff0c;其方法名和类名相同&#xff0c;但没有方法返回值&#xff0c;也不用void修饰。 [修饰符] 方法名(形参列表){方法体 } 修饰符&#xff1a;修饰符可…

数字乡村创新实践探索:科技赋能农业现代化与乡村治理体系现代化同步推进

随着信息技术的飞速发展&#xff0c;数字乡村作为乡村振兴的重要战略方向&#xff0c;正日益成为推动农业现代化和乡村治理体系现代化的关键力量。科技赋能下的数字乡村&#xff0c;不仅提高了农业生产的效率和品质&#xff0c;也为乡村治理带来了新的机遇和挑战。本文旨在探讨…

Linux 环境下 Redis基础配置及开机自启

Linux 环境下 Redis基础配置及开机自启 linux环境安装redis<redis-6.0.5.tar.gz> 1-redis基本安装配置 解压 获取到tar包后&#xff0c;解压到相关目录&#xff0c;一般是将redis目录放在usr/local/redis目录下&#xff0c;可以使用-C指定到解压下目录 tar -zvxf re…

Java数据结构栈

栈&#xff08;Stack&#xff09; 概念 栈是一种先进后出的数据结构。 栈的使用 import java.util.Stack; public class Test {public static void main(String[] args) {Stack<Integer> s new Stack();s.push(1);s.push(2);s.push(3);s.push(4);System.out.println(s…

3. python练习题3-自由落体

3. python练习题3-自由落体 【目录】 文章目录 3. python练习题3-自由落体1. 目标任务2. 解题思路3. 知识回顾-%占位符格式化处理3.1 概述3.2 占位符的多种用法3.3 格式化操作符辅助指令3.4 将整数和浮点数格式化为字符串 4. 解题思路4.1 球第1次下落4.2 球第2次下落 5. 最终代…

day60 动态规划part17

这两题看了自己写的笔记还不懂的话&#xff0c;看看这个up的思路就行&#xff1a; https://space.bilibili.com/111062940/search/video?keyword%E5%9B%9E%E6%96%87 647. 回文子串 中等 提示 给你一个字符串 s &#xff0c;请你统计并返回这个字符串中 回文子串 的数目。 回…

学习【RabbitMQ入门】这一篇就够了

目录 1. RabbitMQ入门1-1. 同步调用1-2. 异步调用1-3. MQ技术选型1-4. RabbitMQ介绍消息模式 1-5. SpringAMQPBasic QueueWork QueueFanout ExchangeDirect ExchangeTopic Exchange消息转换器 1. RabbitMQ入门 1-1. 同步调用 优势&#xff1a; 时效性强&#xff0c;等待到结…

Invarient facial recongnition

for later~ 代码阅读 1. 加载trainset import argparse import logging import os import numpy as npimport torch from torch import distributed from torch.utils.data import DataLoader from torch.utils.tensorboard import SummaryWriterfrom backbones import get_…

Windows 2008虚拟机安装、安装VM Tools、快照和链接克隆、添加硬盘修改格式为GPT

一、安装vmware workstation软件 VMware workstation的安装介质&#xff0c;获取路径&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1AUAw_--yjZAUPbsR7StOJQ 提取码&#xff1a;umz1 所在目录&#xff1a;\vmware\VMware workstation 15.1.0 1.找到百度网盘中vmwa…

Mysql的基本命令

1 服务相关命令 命令描述systemctl status mysql查看MySQL服务的状态systemctl stop mysql停止MySQL服务systemctl start mysql启动MySQL服务systemctl restart mysql重启MySQL服务ps -ef | grep mysql查看mysql的进程mysql -uroot -hlocalhost -p123456登录MySQLhelp显示MySQ…

C++初阶:vector类的模拟实现(含模板)

目录 1.Vector.h 2.Test.cpp 1.Vector.h #include <iostream> #include <cassert> #include <algorithm> using namespace std; template <class T> class Vector { public:typedef T *iterator;typedef const T *const_iterator;iterator begin() …

8.list容器的使用

文章目录 list容器1.构造函数代码工程运行结果 2.赋值和交换代码工程运行结果 3.大小操作代码工程运行结果 4.插入和删除代码工程运行结果 5.数据存取工程代码运行结果 6.反转和排序代码工程运行结果 list容器 1.构造函数 /*1.默认构造-无参构造*/ /*2.通过区间的方式进行构造…

java-网络编程socket-聊天室-03

完整版代码 java -聊天室的代码: 用于存放聊天室的项目的代码和思路导图https://gitee.com/to-uphold-justice-for-others/java---code-for-chat-rooms.git 多线程并发问题 多线程的并发问题主要出现在当一个程序涉及多个线程同时运行时&#xff0c;这些线程可能会同时访问共…

conda删除环境指令

要删除Conda环境&#xff0c;你可以使用下面的指令&#xff1a; conda remove --name your_env_name --all这里的 your_env_name 是你想要删除的环境名称。这条指令会删除指定的环境及其下的所有包。 如果你正在使用的是Anaconda Prompt或者是命令行界面&#xff0c;确保你有…

Java:接口应用(Clonable 接口和深拷贝)

目录 1.引例2.Object中clone方法的实现3.Cloneable接口讲解4.深拷贝和浅拷贝4.1浅拷贝4.2深拷贝 1.引例 Java 中内置了一些很有用的接口, Clonable 就是其中之一. Object 类中存在一个 clone 方法, 调用这个方法可以创建一个对象的 “拷贝”. 但是要想合法调用 clone 方法。必…

精密电阻阻值表和电容容值表

前面2张是电阻阻值表&#xff08;E-96/0603/1%&#xff09; 常见贴片电容的容值表

解决windows下Qt Creator显示界面过大的问题

&#x1f40c;博主主页&#xff1a;&#x1f40c;​倔强的大蜗牛&#x1f40c;​ &#x1f4da;专栏分类&#xff1a;QT❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 问题描述 解决方法 1、右击此电脑--->属性 2、点击高级系统设置--->点击环境变量 3、 找到系…