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

C语言笔记25 •顺序表介绍•

        数据结构是计算机存储、组织数据的⽅式。数据结构是指相互之间存在⼀种或多种特定关系
的数据元素的集合。数据结构反映数据的内部构成,即数据由那部分构成,以什么⽅式构成,以及数据元素之间呈现的结构。也就是能够存储数据; 存储的数据能够⽅便查找。
 

1.为什么需要数据结构

        数据结构,能够有效将数据组织和管理在一起。按照我们的⽅式任意对数据进⾏增删改查等操作。最基础的数据结构:数组。但是最基础的数据结构能够提供的操作已经不能完全满⾜复杂算法实现,所以就需要引入 顺序表。
2.顺序表
       顺序表的底层结构是数组,对数组的封装,实现了常用的增删改查等接口,这就解决了数组(不能完全满足复杂算法实现)的缺点。
3.顺序表的代码示例:
// SeqList.h #pragma once
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>typedef int SLDataType;
typedef struct SeqList
{SLDataType* arr;int size;int capacity;}SL;
//typedef struct SeqList SL;//顺序表初始化
void SLInit(SL* ps);
//顺序表销毁头部插入
void SLDestroy(SL* ps);//数据打印
void SLprint(SL sl);//插入数据之前先看空间够不够
void SLCheckCapacity(SL* ps);//尾部插入&头部插入
//尾部插入
void SLPushback(SL* ps, SLDataType x);
//头部插入
void SLPushFront(SL* ps, SLDataType x);//尾部删除&头部删除
//尾部删除
void SLPopBack(SL* ps);
//头部删除
void SLPopFront(SL* ps);

//SeqList.c#define _CRT_SECURE_NO_WARNINGS 1
#include "SeqList.h"//顺序表初始化
void SLInit(SL* ps)
{ps->arr = NULL;ps->size = 0;ps->capacity = 0;
}
//顺序表销毁
void SLDestroy(SL* ps)
{if (ps->arr){free(ps->arr);}ps->arr = NULL;ps->size = 0;ps->capacity = 0;
}//插入数据之前先看空间够不够
void SLCheckCapacity(SL* ps)
{if (ps->capacity == ps->size)//空间不够了  需要申请内存{int Newcapacity = ps->capacity == 0 ? 4 : 2 * ps->capacity;SLDataType* temp = realloc(ps->arr, Newcapacity * sizeof(SLDataType));if (temp == NULL){perror("realloc");exit(1);//return 1;}ps->arr = temp;//内存申请成功ps->capacity = Newcapacity;}
}
//数据打印
void SLprint(SL sl)
{for (int i = 0; i < sl.size; i++){printf("%d ", sl.arr[i]);}printf("\n");
}
//尾部插入
void SLPushback(SL* ps, SLDataType x)
{assert(ps);SLCheckCapacity(ps);//ps->arr[ps->size] = x;//++ps->size;ps->arr[ps->size++] = x;
}
//头部插入
void SLPushFront(SL* ps, SLDataType x)
{assert(ps);SLCheckCapacity(ps);//先让顺序表中已有的数据整体往后挪动一位for (int i = ps->size;i>0; i--){ps->arr[i] = ps->arr[i - 1];//arr[1]=arr[0]}ps->arr[0] = x;ps->size++;//长度+1
}//尾部删除
void SLPopBack(SL* ps)
{assert(ps);ps->size--;//--ps->size
}
//头部删除
void SLPopFront(SL* ps)
{assert(ps);for (int i = 0; i < ps->size - 1; i++){ps->arr[i] = ps->arr[i + 1];}ps->size--;
}

//SeqList-test.c#define _CRT_SECURE_NO_WARNINGS 1
#include"SeqList.h"void test()
{SL sl;SLInit(&sl);//初始化SLPushback(&sl, 1);//尾插一个数字1SLPushback(&sl, 2);//尾插一个数字1SLPushback(&sl, 3);//尾插一个数字1SLPushback(&sl, 4);//尾插一个数字1SLprint(sl);//1 2 3 4SLPushFront(&sl, 0); //头插一个数字0SLprint(sl);//0 1 2 3 4SLPopBack(&sl);//尾删一个数字SLprint(sl);//0 1 2 3 SLPopFront(&sl);//头删一个数字SLprint(sl);//1 2 3 SLDestroy(&sl);
}int main()
{test();return 0;
}

相关文章:

  • Ubuntu乌班图安装VIM文本编辑器工具
  • k8s解决java服务下载超时问题
  • lighttpd cgi不能重启
  • 【毕业设计】Django 校园二手交易平台(有源码+mysql数据)
  • 笔记-python map函数
  • 视频智能分析平台智能边缘分析一体机安防监控平台打手机检测算法工作原理介绍
  • 2024年旅游与经济发展国际会议(ICTED 2024)
  • 在WordPress上添加亚马逊联盟链接的三种方法
  • 网络安全筑基篇——SQL注入
  • 什么是粘性代理IP
  • Ubuntu 22.04.4 LTS openresty(Nginx) 通过Lua+Redis 实现动态封禁IP
  • 中介子方程二十八
  • Talking-Heads Attention
  • Kotlin 中的 infix 关键字(中缀函数)
  • C# 集合(二) —— List/Queue类
  • php的引用
  • 【附node操作实例】redis简明入门系列—字符串类型
  • axios 和 cookie 的那些事
  • Bytom交易说明(账户管理模式)
  • golang 发送GET和POST示例
  • JavaScript设计模式之工厂模式
  • Java多线程(4):使用线程池执行定时任务
  • java小心机(3)| 浅析finalize()
  • Material Design
  • node和express搭建代理服务器(源码)
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • v-if和v-for连用出现的问题
  • 不上全站https的网站你们就等着被恶心死吧
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 聚类分析——Kmeans
  • 前嗅ForeSpider教程:创建模板
  • 日剧·日综资源集合(建议收藏)
  • 设计模式走一遍---观察者模式
  • 通过几道题目学习二叉搜索树
  • 一些关于Rust在2019年的思考
  • 浅谈sql中的in与not in,exists与not exists的区别
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • ​比特币大跌的 2 个原因
  • ​用户画像从0到100的构建思路
  • $.ajax()方法详解
  • (10)ATF MMU转换表
  • (3)(3.5) 遥测无线电区域条例
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (笔试题)分解质因式
  • (差分)胡桃爱原石
  • (二)Kafka离线安装 - Zookeeper下载及安装
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (转)jdk与jre的区别
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .describe() python_Python-Win32com-Excel
  • .NET Framework与.NET Framework SDK有什么不同?
  • .Net mvc总结
  • .Net Web窗口页属性
  • .NET 程序如何获取图片的宽高(框架自带多种方法的不同性能)