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

域名备案查询网站wordpress子主题安装

域名备案查询网站,wordpress子主题安装,wordpress页面与文章,家具网站开发环境与工具1、顺序表的概念及结构 1.1 线性表 线性表#xff08; linear list #xff09;是n个具有相同特性的数据元素的有限序列。 线性表是⼀种在实际中广泛使用的数据结构#xff0c;常见的线性表#xff1a;顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线性结构#…1、顺序表的概念及结构 1.1 线性表 线性表 linear list 是n个具有相同特性的数据元素的有限序列。 线性表是⼀种在实际中广泛使用的数据结构常见的线性表顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线性结构也就说是连续的⼀条直线。但是在物理结构上并不⼀定是连续的 线性表在物理上存储时通常以数组和链式结构的形式存储。 案例蔬菜分为绿叶类、⽠类、菌菇类。线性表指的是具有部分相同特性的⼀类数据结构的集合 2、顺序表分类 2.1顺序表和数组的区别 顺序表的底层结构是数组对数组的封装实现了常用的增删改查等接⼝ 2.2顺序表分类 1.静态顺序表: 概念使用定长数组存储元素 代码示例 typrdef int SLDataType; #define N 8 typedef struct SeqList {SLDataType a[N];//定长数组int size; //有效数据个数 }SL;这就是一个静态顺序表它又一定的缺陷。 容易出现空间给少了不够用给多了造成空间浪费 2.动态顺序表 它的特点是按需申请 3.动态顺序表的实现 我们首先创建相应的头文件和程序文件 我们现在头文件中引用头文件定义所需要的结构体和函数 #includestdio.h #includeassert.h #includestdlib.h typedef int SLDataType;typedef struct SeqList {SLDataType* arr; //存储数据的底层结构int capacity; //记录顺序表的空间大小int size; //记录顺序表当前有效的数据个数 }SL; //初始化 void SLInit(SL* ps); //销毁 void SLDestroy(SL* ps); //顺序表的头部 / 尾部插入 void SLPushFront(SL* ps, SLDataType x); void SLPushBack(SL* ps, SLDataType x); //顺序表的头部 / 尾部删除 void SLPopBack(SL* ps); void SLPopFront(SL* ps);//打印 void SLPrint(SL* ps); //删除指定位置的值 void SLInsert(SL* ps, int pos, SLDataType x); void SLErase(SL* ps, int pos); 我们先定义一个动态顺序表 注意这行代码是为了设定我们的数据类型 1.初始化 接下来我们要初始化我们的顺序表。所以我们定义了这个函数 接着我们去源文件写完这个函数让指针指向NULL大小设定为0完成初始化 void SLInit(SL* ps) {ps-arr NULL;ps-size ps-capacity 0; } 写完了初始化我们可以开始写功能 首先就是头插和尾插 我们接着完善 2.头插 我们先来写头插函数 void SLPushFront(SL* ps, SLDataType x) 首先我们来思考以下问题一个数组如何头插以及目前的内存大小能否插入新的数据 假设足够 数组头插我们一般将数组的各个元素后移一位然后将数组arr[0]赋值成我们要插入的数据 void SLPushFront(SL* ps, SLDataType x) {assert(ps); for (int i ps-size; i 0; i--) //i 1{ps-arr[i] ps-arr[i - 1]; //ps-arr[1] ps-arr[0]}ps-arr[0] x;ps-size; }我们不难写出这个函数但是它对吗 显然存在一定的问题我们前面的条件是设置在空间充足的情况下如果空间不足的话我们该怎么办呢 当然是扩容啦 所以我们再写一个检查空间是否充足的函数如果不足顺便扩容。 那么既然说到扩容我们应该怎样扩容呢 我这里有三种扩容方式 1.一次扩容一个空间 2.一次扩容多个大小的空间 3.成倍的增加空间1.5倍2倍 这里我推荐第三种方法。 理由 第一种一次扩容一个空间好处是不会造成空间的浪费缺点是如果我们输入大量数据时它需要多次开辟导致程序效率低下。         第二种一次开辟多个空间有效解决了第一种导致程序小路低下的问题但是它也有相应的问题我们不能确定一次开辟多大的空间合适如果开辟小了一样也会和第一种一样多次扩容影响程序效率但如果一下周四开辟空间过大也会导致空间被浪费。 我们先定义函数 void SLCheckCapacity(SL* ps) 接着判断是否需要扩容然后扩容空间但是由于我们初始化直接是NULL所以这里我再加上一个三目操作符总体代码如下 void SLCheckCapacity(SL* ps) {if (ps-size ps-capacity){int newCapacity ps-capacity 0 ? 4 : 2 * ps-capacity;SLDataType* tmp (SLDataType*)realloc(ps-arr, newCapacity * sizeof(SLDataType));if (tmp NULL) {perror(realloc fail!);exit(1);}//扩容成功ps-arr tmp;ps-capacity newCapacity;} } 这里我设置了tmp变量是为了防止扩容失败。这里我选择的就是扩容原来的两倍。 接下来我们按照上面的思路把头插完善 void SLPushFront(SL* ps, SLDataType x) {assert(ps);SLCheckCapacity(ps);for (int i ps-size; i 0; i--) //i 1{ps-arr[i] ps-arr[i - 1]; //ps-arr[1] ps-arr[0]}ps-arr[0] x;ps-size; } 3.尾插 做完了头插我们可以来试试尾插数组中尾插是神简单的如图 如果空间充足我们可以直接再尾部插入我们的数据然后吧size不够的话先扩容然后再执行 void SLPushBack(SL * ps, SLDataType x) {assert(ps);SLCheckCapacity(ps);ps-arr[ps-size] x; } 这样头插和尾插就完成了 4.头删 完成了插入那么我们还需要完成删除删除相比较插入它有什么不同删除不需要太在意空间。 现在我们先来完成头删。 在数组中我们怎么完成头删的呢如图 我们一般是把每个数向前移动一位数组有效长度-1及size--; 代码示例 void SLPopFront(SL* ps) {assert(ps);assert(ps-size);for (int i 0; i ps-size - 1; i){ps-arr[i] ps-arr[i 1];}ps-size--; } 注意我们要确保ps和ps-size不为NULL 5.尾删 这个操作实现起来其实非常简单我们可以直接size--; 代码示例 void SLPopBack(SL* ps) {assert(ps);assert(ps-size); ps-size--;} 完成这些那么我要上难度了删除指定位置的值/插入指定位置的值 6.删除指定位置的值 具体思路就是遍历去寻找所需数值然后并将该数值之后的数据的下标前移siza--如图 代码示例 void SLErase(SL* ps, int pos) {assert(ps);assert(pos 0 pos ps-size);//pos以后的数据往前挪动一位for (int i pos; i ps-size - 1; i){ps-arr[i] ps-arr[i 1];//ps-arr[i-2] ps-arr[i-1];}ps-size--; }7.在指定位置插入值 思路找到数值将该数值及其后的向后移动一位。size 如图 代码示例 void SLInsert(SL* ps, int pos, SLDataType x) {assert(ps);assert(pos 0 pos ps-size);SLCheckCapacity(ps);//pos及之后的数据往后挪动一位pos空出来for (int i ps-size; i pos; i--){ps-arr[i] ps-arr[i - 1]; //ps-arr[pos1] ps-arr[pos]}ps-arr[pos] x;ps-size; } 注这是插入要检查空间是否足够 8.打印 完成这些我们可以来尝试打印我们的顺序表类似打印数组。 代码示例 void SLPrint(SL* ps) {for (int i 0; i ps-size; i){printf(%d , ps-arr[i]);}printf(\n); } 9.销毁顺序表 在我们之前讲过动态内存开辟最后要再释放。 代码示例 void SLDestroy(SL* ps) {assert(ps);if (ps-arr) {free(ps-arr);}ps-arr NULL;ps-size ps-capacity 0; } 最后来展示程序代码 #includeSeqList.h void SLInit(SL* ps) {ps-arr NULL;ps-size ps-capacity 0; } void SLDestroy(SL* ps) {assert(ps);if (ps-arr) {free(ps-arr);}ps-arr NULL;ps-size ps-capacity 0; } void SLCheckCapacity(SL* ps) {if (ps-size ps-capacity){int newCapacity ps-capacity 0 ? 4 : 2 * ps-capacity;SLDataType* tmp (SLDataType*)realloc(ps-arr, newCapacity * sizeof(SLDataType));if (tmp NULL) {perror(realloc fail!);exit(1);}//扩容成功ps-arr tmp;ps-capacity newCapacity;} } void SLPushBack(SL * ps, SLDataType x) {assert(ps);SLCheckCapacity(ps);ps-arr[ps-size] x; } void SLPushFront(SL* ps, SLDataType x) {assert(ps);SLCheckCapacity(ps);for (int i ps-size; i 0; i--) //i 1{ps-arr[i] ps-arr[i - 1]; //ps-arr[1] ps-arr[0]}ps-arr[0] x;ps-size; } void SLPopBack(SL* ps) {assert(ps);assert(ps-size); ps-size--;} void SLPopFront(SL* ps) {assert(ps);assert(ps-size);for (int i 0; i ps-size - 1; i){ps-arr[i] ps-arr[i 1];}ps-size--; } void SLInsert(SL* ps, int pos, SLDataType x) {assert(ps);assert(pos 0 pos ps-size);SLCheckCapacity(ps);for (int i ps-size; i pos; i--){ps-arr[i] ps-arr[i - 1]; //ps-arr[pos1] ps-arr[pos]}ps-arr[pos] x;ps-size; } void SLErase(SL* ps, int pos) {assert(ps);assert(pos 0 pos ps-size);for (int i pos; i ps-size - 1; i){ps-arr[i] ps-arr[i 1];}ps-size--; } void SLPrint(SL* ps) {for (int i 0; i ps-size; i){printf(%d , ps-arr[i]);}printf(\n); } void SLDestroy(SL* ps) {assert(ps);if (ps-arr) {free(ps-arr);}ps-arr NULL;ps-size ps-capacity 0; } //指定位置之前插入数据 void SLInsert(SL* ps, int pos, SLDataType x) {assert(ps);assert(pos 0 pos ps-size);SLCheckCapacity(ps);//pos及之后的数据往后挪动一位pos空出来for (int i ps-size; i pos; i--){ps-arr[i] ps-arr[i - 1]; //ps-arr[pos1] ps-arr[pos]}ps-arr[pos] x;ps-size; } //删除指定位置数据 void SLErase(SL* ps, int pos) {assert(ps);assert(pos 0 pos ps-size);//pos以后的数据往前挪动一位for (int i pos; i ps-size - 1; i){ps-arr[i] ps-arr[i 1];//ps-arr[i-2] ps-arr[i-1];}ps-size--; }这样一个循序表完成了你可以用设计的函数来进行操作。
http://www.hkea.cn/news/14356710/

相关文章:

  • 网站开发与维护视频河北省建设局网站
  • 网站产品展示方案名校长工作室网站建设
  • 海南哪家公司做网站做的好做企业网站需要资质吗
  • 网网站开发nginx里wordpress做伪静态后图片全部不显示
  • 手把手教建设网站网络营销与网络推广的异同
  • wordpress开发企业网站直缝钢管网站建设
  • 如何制作自己的网站免费橙米网站建设
  • 如何利用某个软件做一个网站改wordpress
  • 蓝色系列的网站免费发布信息网站大全注册
  • 黄冈免费网站推广平台汇总wordpress建站成本
  • 做网站帮外国人淘宝网站搭建工具视频
  • 做网站销售好吗有趣的网站小游戏网址
  • 网站图文混排怎么存放到数据库里wordpress 改成论坛
  • 江苏宜兴做网站的电话wordpress语言插件qx
  • 信阳做网站的上海企业网站建设制作
  • 网站做301需要备案吗wordpress添加主题设置选项
  • 重庆自助建站软件北京网站制作哪家好
  • 做led视频好的网站漯河网站开发
  • 网站站内搜索代码网络服务器价格
  • 让别人做网站应注意什么网站建设与管理2018
  • 建设的网站那曲做网站
  • 网站建设开发感悟临漳 网站建设
  • 江阴网站建设公司网站推广的方式包括哪些
  • 网站的设计与开发的图片seo排名培训公司
  • 芜湖网站建设怎么做百度推广视频
  • 网站后台打打开空白广厦建设集团官方网站
  • 国企集团门户网站建设方案浙江金华市建设局网站
  • 买了服务器主机这么做网站机械公司网站建设
  • 做网站的时候宽高办公软件开发公司
  • 建设网站制作哪家好跨境电商开店大概流程