顺序表讲解和顺序表实现增删查改
前言
顺序表是一种参见的数据结构
特点:类似数组的储存,需要预先开辟空间已备数据插入。(1)同时顺序表也因此会存在和数组同样的问题(例如:越界)(2)同时因为其类似与数组的结构给二分查找这种算法提供了编译环境。
使用顺序表实现增删查改是需要注意:
1.整个顺序表有没有提前开辟空间。
2.空间是否足够不够,是否需要扩容。(一般扩容扩2倍)
一、顺序表基本定义方式
1.顺序表静态开辟版本
静态顺序表版本
typedef struct SepList
{SlDataType a[N];int size; //数组中存储数据
}List;
2.顺序表动态开辟版本
顺序表的动态开辟版本
typedef struct SepList
{SlDataType* a;//动态开辟int size; //数组中存储数据int capacity; //数组实际能存数组的数据的空间容量
}List;
二、顺序表动态开辟内存
顺序表动态内存开辟
void SepListCheckCapacity(List* ps)
{if (ps->size == ps->capacity){int newcapacity = ps->capacity == 0 ? 4 : ps->capacity * 2;SlDataType* temp = (SlDataType*)realloc(ps->a, newcapacity * sizeof(SlDataType));if (temp == NULL){printf("realloc fail \n");exit(-1);}ps->a = temp;ps->capacity = newcapacity;}
}
三、增删查改的实现
void SepListPushBack(List* ps, SlDataType x)//尾插
{//没有空间(增容)if (ps->size == ps->capacity){int newcapacity = ps->capacity == 0 ? 4 : ps -> capacity * 2;SlDataType* temp = (SlDataType*)realloc(ps->a, newcapacity * sizeof(SlDataType));if (temp == NULL){printf("realloc fail \n");exit(-1);}ps->a = temp;ps->capacity = newcapacity;}//空间足够ps->a[ps->size] = x;ps->size++;
}void SepListPopBack(List* ps)//尾删
{if (ps->size > 0){ps->a[ps->size - 1] = 0;ps->size--;}
}void SepListPushFront(List* ps, SlDataType x)//头插
{//增加内容容易出现越界现象(检查空间是否足够很重要,越界编译器不会报错)可以单独创建一个扩容函数,//没有空间(增容)/*if (ps->size == ps->capacity){int newcapacity = ps->capacity == 0 ? 4 : ps->capacity * 2;SlDataType* temp = (SlDataType*)realloc(ps->a, newcapacity * sizeof(SlDataType));if (temp == NULL){printf("realloc fail \n");exit(-1);}ps->a = temp;ps->capacity = newcapacity;}*/SepListCheckCapacity(ps);//调用扩容函数版本 (尾插是尾插内部写入函数的版本)//空间足够int end = ps->size - 1;while (end >= 0){ps->a[end + 1] = ps->a[end];end--;}ps->a[0] = x;ps->size++;
}void SepListPopFront(List* ps)//头删
{assert(ps->size > 0);//挪动数据int begin = 1;while (begin < ps->size){ps->a[begin - 1] = ps->a[begin];begin++;}ps->size--;
}
int SepListFind(List* ps, SlDataType x)//查找 (找到了返回下标,没找到返回-1)
{for (int i = 0; i < ps->size; i++){if (ps->a[i] == x){return i;}}return -1;
}
void SepListInsert(List* ps, int pos, SlDataType x)
{assert(pos <= ps->size && pos >= 0);SepListCheckCapacity(ps);int end = ps->size - 1;//挪动数据while (end >= pos){ps->a[end + 1] = ps->a[end];end--;}ps->a[pos] = x;ps->size++;
}
void SepListErase(List* ps, int pos)//删除指定位置数据
{assert(pos < ps->size && pos >= 0);//挪动数据int begin = pos + 1;while (begin < ps->size){ps->a[begin - 1] = ps->a[begin];begin++;} ps->size--;
}
部分细节讲解:
(1)在自行编写代码的过程中在进行插入、删除操作时所有涉及的指针做参数的时候都记得用assert进行断言(让代码更加健壮)
(2)在顺序表中删除数据最为主要的方法是挪动数据对要删除数据进行覆盖,同时在插入数据特别是数据中间和数据头部插入时都需要进行数据挪动
(3)在顺序表中能够使用下标时顺序的一份优势可以好好利用下标进行查找。
总结
在整个顺序表中各种查找、扩容、删除、插入都大同小异注意举一反三。
完整代码自取:https://gitee.com/yi-seventeen/c-and-data-structure/tree/master/%E9%93%BE%E8%A1%A8%E5%88%9B%E5%BB%BAhttps://gitee.com/yi-seventeen/c-and-data-structure/tree/master/%E9%93%BE%E8%A1%A8%E5%88%9B%E5%BB%BA
顺序表讲解和顺序表实现增删查改相关推荐
- 初学jsp课,一个基于jsp+javabean+servlet+sql server小型房源网站,实现了用户表,房源表,及留言板的增删查改。使用deamwear编译器
1 设计目的 <Web应用开发课程设计>是实践性教学环节之一,是<Web程序设计>课程的辅助教学课程.通过课程设计,使学生掌握Web网站的基本概念,结合实际的操作和设计,巩固课 ...
- C语言实现顺序表(增删查改等数据管理)
顺序表seqlist 小伙伴们,提到顺序表会想到什么呢? 数组?还是链表? 其实,数组和链表都是属于线性表,而链表在逻辑上是线性的,并非物理存储上也为线性:而数组无论在逻辑上还是物理存储上均为线性 所 ...
- 07_MySQL数据库_增删查改
此专栏所有章节快速导航 01_MySQL数据库_CentOS7安装MySQL 02_MySQL数据库_数据库基础知识 03_MySQL数据库_库的操作 04_MySQL数据库_表的操作 05_MySQ ...
- 捋一捋Python的文件属性和增删查改等(下)
正式的Python专栏第35篇,同学站住,别错过这个从0开始的文章! 前面写了文件的读取,按行读写等,这篇我们把文件处理等其他函数也过一过吧. 文件属性 前面我们更多集中学习了文件的读写(open)函 ...
- 【线性表】—动态顺序表的增删查改实现
小菜坤日常上传gitee代码:https://gitee.com/qi-dunyan(所有的原码都放在了我上面的gitee仓库里) 数据结构知识点存放在专栏[数据结构]后续会持续更新 ❤❤❤ 个人简介 ...
- C++实现静态顺序表的增删查改以及初始化
C++实现静态顺序表的增删查改 顺序表:用一段地址连续的存储单元依s次存储数据元素的线性结构,是线性表的一种. //SeqList.h#pragma once#include <assert.h ...
- 【顺序表和链表】实现增删查改数据结构 OJ题编程
目录 线性表 一.顺序表 1.使用顺序表MyArrayList增删查改 MyArrayList.java TestDemo.java 二.链表 1.带头 / 不带头 循环 / 非循环 2.创建链表并访 ...
- 【数据结构】顺序表(Seqlist)详解-增删查改
一.顺序表 什么是顺序表: 顺序表表是用一段物理地址连续的存储数据元素的线性结构,一般情况下采用数组存储.在数组上完成数据的增删查改 要求数据是连续存入的 可动态增长的数据 属于线性表的一种 顺序表的 ...
- 数据结构C语言实现顺序表——增删查改操作实现详解
顺序表 顺序表是什么? 顺序表是将元素顺序地存放在一块连续的存储区里,元素间的顺序关系由它们的存储顺序自然表示.实现增删查改的功能. 顺序表所需的头文件: #include<stdio.h> ...
最新文章
- httpd服务相关实验
- matlab向量与x正方向的夹角_MIT—线性代数笔记25 对称矩阵和正定性
- 上证50ETF申赎清单
- TikTok测试三分钟视频、Reddit首次公布DAU、谷歌解雇人工智能领头人、年度最受欢迎应用|Decode the Week...
- 三、Java Web中出现的一些乱码问题总结(详解)
- linux vim复制粘贴删除,Linux vim删除、复制、粘贴快捷键
- CSS进阶(二)——特性
- HtmlUnit初探
- AVAssetWriter写h264数据
- [洛谷1681]最大正方形II
- mac 配置apache
- winserve2016 万能驱动网卡_windows server 2016 安装有线网卡驱动
- Vue子组件与父组件(看了就会)
- GPU运算能力对(2022.4.5更新)
- ARM920T内核工作模式
- Vue 实现Redis管理页面
- Markdown语法大全(超级版)
- 广告动画 android,age动漫官方网软件app-AGE动漫无广告纯净版下载v1.4安卓版-西西软件下载...
- IoT物联网平台「设备影子」开发实战
- static应用知识:代码块