当前位置: 首页 > news >正文

C语言复习之顺序表(十五)

在这里插入图片描述

📖作者介绍:22级树莓人(计算机专业),热爱编程<目前在c阶段>——目标C++、Windows,MySQL,Qt,数据结构与算法,Linux,多线程,会持续分享学习成果和小项目的
📖作者主页:热爱编程的小K
📖专栏链接:C
🎉欢迎各位→点赞👏 + 收藏💞 + 留言🔔​
💬总结:希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🐾

在这里插入图片描述

目录

      • 1.概念
      • 2.定义
      • 3.断言
      • 4.初始化
      • 5.元素的插入
        • A.尾插
        • B.头插
        • C.任意插
      • 6.元素的删除
        • A.尾删
        • B.头删
        • C.查找
        • D.指定删(元素)
        • E.指定位置删除
      • 7.扩容
      • 8.顺序表特点

1.概念

  1. 数组(存储):
    • 静态数组
    • 动态int* parr=calloc(size,sizeof(type));
  2. 容量:capacity
  3. 有效元素个数:size

顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素、使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系,采用顺序存储结构的线性表通常称为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。

2.定义

抽象数据类型,是为了更好的适应,当换数据类型的时候好切换

在这里插入图片描述

3.断言

相比较if语句更简便,更好用

#include<assetr.h>
assert(...);   //断言...为真,如果不为真,则会中断程序

4.初始化

使用malloc函数,最后不用把指针置为空,因为malloc会初始化为空

在这里插入图片描述

5.元素的插入

A.尾插

//尾插
void seqlist_pushback(seqlist* list, Elementtype val)
{if(seqlist_full(list)){printf("seqlist is full , can't insert ! \n");return;}list->data[list->size++] = val;
}

B.头插

//头插
void seqlist_pushfront(seqlist* list, Elementtype val)
{if (seqlist_full(list)){printf("seqlist is full , can't insert !\n");return;}//先移动后面的元素,为新插入的元素的元素的腾出空间for ( int i = list->size; i >0 ; i--){list->data[i] = list->data[i - 1];}//插入新元素list->data[0] = val;list->size++;
}

C.任意插

//任意插
void seqlist_insert(seqlist* list, int pos, Elementtype val)
{if (seqlist_full(list)){printf("seqlist is full , can't insert !\n");return;}//判断pos是否合法if( pos < 0 || pos > list->size ){pos = list->size;}//移动for ( int i = list->size ; i >pos ; i--){list->data[i] = list->data[i - 1];}list->data[pos] = val;list->size++;
}

6.元素的删除

A.尾删

//尾删
void seqlist_popback(seqlist* list)
{if(seqlist_empty(list)){printf("seqlist is emoty , can't delete !\n");return;}list->size--;
}

B.头删

//头删
void seqlist_popfront(seqlist* list)
{if (seqlist_empty(list)){printf("seqlist is emoty , can't delete !\n");return;}for ( int i = 0; i < list->size-1; i++){list->data[i] = list->data[i + 1];}list->size--;
}

C.查找

//查找
int seqlist_find(seqlist* list, Elementtype val)
{for (int i = 0; i < list->size; i++){if (list->data[i] == val){return i;}}return -1;
}

D.指定删(元素)

//指定删(元素)
void seqlist_removeOne(seqlist* list, Elementtype val)
{if (seqlist_empty(list)){printf("seqlist is emoty , can't delete !\n");return;}if(seqlist_find(list,val)){for (int j = seqlist_find(list, val); j < list->size - 1; j++){list->data[j] = list->data[j + 1];}}list->size--;
}

E.指定位置删除

//指定位置删除
void seqlist_removePos(seqlist* list, int pos)
{
if (seqlist_empty(list))
{
printf(“seqlist is emoty , can’t delete !\n”);
return;
}
assert(pos > 0 && pos < list->size);
for (int i = pos; i < list->size-1 ; i++)
{
list->data[i] = list->data[i + 1];
}
list->size–;
}

7.扩容

bool inc(seqlist* list)
{seqlist* newlist = realloc(list->data, list->capacity + list->capacity * 2, sizeof(Elementtype));if( !newlist ){return false;}list->data = newlist;list->capacity += list->capacity * 2;return true;
}

8.顺序表特点

顺序表所具备的特点之一是:可以随机访问任一结点。顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素、使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系,采用顺序存储结构的线性表通常称为顺序表。
数据(data)是事实或观察的结果,是对客观事物的逻辑归纳,是用于表示客观事物的未经加工的原始素材。数据可以是连续的值,比如声音、图像,称为模拟数据。也可以是离散的,如符号、文字,称为数字数据。在计算机系统中,数据以二进制信息单元0,1的形式表示。

http://www.lryc.cn/news/62148.html

相关文章:

  • 学系统集成项目管理工程师(中项)系列10_立项管理
  • 电视盒子哪个好?数码小编盘点2023电视盒子排行榜
  • flink动态表的概念详解
  • ArcGIS Pro用户界面
  • HDCTF 2023 Pwn WriteUp
  • 【 Spring 事务 】
  • 【刷题之路】LeetCode 203. 移除链表元素
  • 关于Open Shift(OKD) 中 用户认证、权限管理、SCC 管理的一些笔记
  • 活动文章测试(勿删)
  • Windows下 批量重命名文件【bat实现】
  • 从 Milvus 2.2 到 2.2.6,我们是如何持续稳定升级的
  • 自学python有推荐的么
  • 设计模式 --- 行为型模式
  • 防御式编程
  • 导出pdf Puppeteer 和 wkhtmltopdf区别
  • sequelize + Nodejs + MySQL 的简单用法
  • Android Jetpack - Navigation 组件:进行应用程序导航
  • MySQL的binlog原理和它的几种使用方法
  • 40岁以上的程序员还容易找到工作吗?聊聊我自己的亲身经历
  • Class类
  • Python小姿势 - 可选知识点:
  • Javaee Spring的AOP简介
  • 基于ansible初始化linux服务器基础环境。
  • leetcode-数据库题
  • [元来学NVMe协议] NVMe IO 指令集(NVM 指令集)| Flush 命令
  • 信息的相关性和冗余度:信息在整个文明中的作用
  • python数据结构与算法-动态规划(最长公共子序列)
  • Java版企业电子招投标系统源码 Spring Cloud+Spring Boot 电子招标采购系统功能清单
  • 【c语言】函数的基本概念 | 函数堆栈调用原理
  • Vue.prototype 详解及使用