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

网站备案 公安局成都官网seo服务

网站备案 公安局,成都官网seo服务,西安不动产查询房产信息网,18款禁用软件app网站入口目录 1. 概念与结构 1.1 静态顺序表 1.2 动态顺序表 2. 动态顺序表实现 2.1 SeqList.h 2.2 SeqList.c 2.3 Test_SeqList.c 3. 顺序表性能分析 线性表是n个具有相同特性的数据元素的有限序列。 常见的线性表有:顺序表、链表、栈、队列、字符串等&#xff1b…

目录

1. 概念与结构

1.1 静态顺序表

1.2 动态顺序表

2. 动态顺序表实现

2.1 SeqList.h

2.2 SeqList.c

2.3 Test_SeqList.c

3. 顺序表性能分析


线性表是n个具有相同特性的数据元素的有限序列。

常见的线性表有:顺序表、链表、栈、队列、字符串等;

线性表在逻辑上是连续的线性结构,在物理结构上并不一定是连续的

线性表在物理上存储时,通常以数组和链式结构的形式存储,分别称之为顺序表和链表。

本文介绍顺序表。

1. 概念与结构

顺序表是用一段物理地址连续的存储单元依次存储数据的线性结构,一般情况下采取数组存储,在数组上完成数据的增删查改;

要求数据必须从第一个位置开始连续存放;

顺序表在逻辑上是连续的,在物理上也是连续的

1.1 静态顺序表

#define N 100
typedef int SLDataType;
// 静态顺序表
typedef struct SeqList{SLDataType arr[N]; // 定长数组size_t size;  // 有效数据个数
}SeqList;

在定义时使用定长数组,会造成数组大小若太小则导致不够用,数组若太大则导致空间浪费; 

1.2 动态顺序表

#define N 100
typedef int SLDataType;
// 动态顺序表
typedef struct SeqList {SLDataType* arr;size_t size;    // 有效数据个数size_t capacity;  // 空间大小
}SeqList;

在定义时仅给定数组首元素地址,并且基于size和capacity实现动态增容,相较而言更灵活。

注:1、通常会将顺序表的结构体命名为struct SeqList,即Sequence List;

2、建议目录结构:(注意自定义头文件的包含)

.h头文件:顺序表结构、声明顺序表的方法

.c/.cpp源文件:实现顺序表的方法+测试

3、为便于修改程序,通常会将顺序表结构体中的数据类型进行重命名,可命名为SLDataType;

      为便于编写程序,通常也会对顺序表结构体进行重命名,可重命名为SeqList或SL;

2. 动态顺序表实现

2.1 SeqList.h

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#define N 100
typedef int SLDataType;
typedef struct SeqList {SLDataType* arr;int size;   // 有效数据个数int capacity;  // 空间大小
}SL;
// 空间检查
void SLCheckCapacity(SL* psl);
// 打印
void SLPrint(SL* psl);
// 初始化
void SLInit(SL* psl);
// 销毁
void SLDestory(SL* psl);
// 尾插
void SLPushBack(SL* psl, SLDataType x);
// 头插
void SLPushFront(SL* psl, SLDataType x);
// 尾删
void SLPopBack(SL* psl);
// 头删
void SLPopFront(SL* psl);
// 指定位置插入
void SLInsert(SL* psl,int pos, SLDataType x);
// 指定位置删除
void SLErase(SL* psl,int pos);
// 查找
int SLFind(SL* psl, SLDataType x);
// 修改
void SLModify(SL* psl, int pos, SLDataType x);

2.2 SeqList.c

#include "SeqList.h"
// 初始化
void SLInit(SL* psl) {psl->arr = NULL;psl->size = psl->capacity = 0;
}
// 销毁
void SLDestory(SL* psl) {if (psl->arr) {free(psl->arr);}psl->arr = NULL;psl->size = psl->capacity = 0;
}
// 打印
void SLPrint(SL* psl) {assert(psl);for (int i = 0; i < psl->size; i++) {printf("%d ", psl->arr[i]);}printf("\n");
}
// 空间检查
void SLCheckCapacity(SL* psl) {if (psl->capacity == psl->size) {// 常以2倍增容int newCapacity = psl->capacity == 0 ? 4 : psl->capacity * 2;SLDataType* tmp = (SLDataType*)realloc(psl->arr, newCapacity*sizeof(SLDataType));if (tmp == NULL) {perror("realloc fail\n");exit(1);}psl->arr = tmp;psl->capacity = newCapacity;}
}
// 尾插
void SLPushBack(SL* psl, SLDataType x) {assert(psl);SLCheckCapacity(psl);// 写法1/*psl->arr[psl->size] = x;psl->size++;*/// 写法2psl->arr[psl->size++] = x;
}
// 头插
void SLPushFront(SL* psl, SLDataType x) {assert(psl);SLCheckCapacity(psl);int count = psl->size;// 写法一while (count) {psl->arr[count] = psl->arr[count-1];count--;}// 写法二//for (int i = psl->size; i > 0; i--) {//	psl->arr[i] = psl->arr[i - 1];//}psl->arr[0] = x;psl->size++;
}
// 尾删
void SLPopBack(SL* psl) {assert(psl);assert(psl->size);psl->size--;
}
// 头删
void SLPopFront(SL* psl) {assert(psl);assert(psl->size);for (int i = 0; i < psl->size - 1; i++) {psl->arr[i] = psl->arr[i+1];}psl->size--;
}
// 指定位置插入
void SLInsert(SL* psl, int pos, SLDataType x) {assert(psl);assert(pos>=0 && pos<psl->size);SLCheckCapacity(psl);for (int i = psl->size; i >psl->size - pos;i--) {psl->arr[i] = psl->arr[i-1];}psl->arr[pos] = x;psl->size++;
}
// 指定位置删除
void SLErase(SL* psl, int pos) {assert(psl);assert(pos >= 0 && pos < psl->size);for (int i = pos; i < psl->size - 1; i++) {psl->arr[i] = psl->arr[i + 1];}psl->size--;
}
// 查找
int SLFind(SL* psl, SLDataType x) {assert(psl);for (int i = 0; i < psl->size; i++) {if (psl->arr[i] == x)return i;}return -1;
}
// 修改
void SLModify(SL* psl, int pos, SLDataType x) {assert(psl);assert(pos >= 0 && pos < psl->size);psl->arr[pos] = x;
}

2.3 Test_SeqList.c

#include"SeqList.h"
int main() {SL sl1;SLInit(&sl1);printf("Test SLPushBack:PushBack5~10:\n");SLPushBack(&sl1, 5);SLPushBack(&sl1, 6);SLPushBack(&sl1, 7);SLPushBack(&sl1, 8);SLPushBack(&sl1, 9);SLPushBack(&sl1, 10);SLPrint(&sl1);printf("TestPushFront:PushFront 4~2:\n");SLPushFront(&sl1, 4);SLPushFront(&sl1, 3);SLPushFront(&sl1, 2);SLPrint(&sl1);printf("TestPopBack:PopBack 10:\n");SLPopBack(&sl1);SLPrint(&sl1);printf("TestPopFront:PopFront 2:\n");SLPopFront(&sl1);SLPrint(&sl1);printf("TestInsert:Insert arr[4]=99:\n");SLInsert(&sl1, 4, 99);SLPrint(&sl1);printf("TestErase:Erase arr[3]:\n");SLErase(&sl1, 3);SLPrint(&sl1);printf("TestFind: Find 99:\n");int retIndex = SLFind(&sl1, 99);printf("The index of 99 is: %d\n", retIndex);printf("TestModify:Modify 99 to 100:\n");SLModify(&sl1, 3, 100);SLPrint(&sl1);SLDestory(&sl1);
}

测试用例运行结果:

注:1、关于初始化与扩容问题:(方法多样,逻辑完整即可)

上文示例为SLInit使得psl->capacity初值为0,从而在SLCheckCapacity中对于0容量的扩容不能采取一概而论的二倍扩容法,上例使用三目操作符:?使得capacity被赋值为4。

也可在SLInit中就对capacity赋予一个初值,但对应的psl->arr就不可再赋值为NUL了,也需对应malloc相应大小的空间;

2、注意指定位置插入SLInsert与指定位置删除SLErase对pos参数的判定区别:

对于SLInsert,pos可取值size,即实现尾插效果;

对于SLErase,pos不可取值size,arr[psl->size]实际是数组arr最后一个有效数据的下一个位置;

3. 顺序表性能分析

优点:物理空间连续:便于利用下标随机访问

缺点:(1)空间不够需扩容。

① 需要申请新的空间,拷贝数据,释放旧空间,有一定性能消耗;

② 一般增容呈2倍增长,存在空间浪费;

(2)头部或者中间位置的插入删除时涉及数据的移动,时间复杂度为O(N),效率低下

注:越界是不一定报错的,系统对于越界的检查是设岗抽查,以VS为例:

    int a[10];a[10] = 1;a[11] = 1;

当我们运行如上代码,系统会报错:

再运行下文代码:

    int a[10];a[12] = 1;a[13] = 1;

系统不会报错。说明系统只重点检查部分位置的越界情况。


文章转载自:
http://cofacter.pfbx.cn
http://carageen.pfbx.cn
http://sarre.pfbx.cn
http://hoggery.pfbx.cn
http://micronize.pfbx.cn
http://ornithoid.pfbx.cn
http://zionward.pfbx.cn
http://detraction.pfbx.cn
http://mithridatism.pfbx.cn
http://exclude.pfbx.cn
http://relation.pfbx.cn
http://moonwatcher.pfbx.cn
http://concerning.pfbx.cn
http://tannery.pfbx.cn
http://farmer.pfbx.cn
http://worrisome.pfbx.cn
http://assoluta.pfbx.cn
http://spilth.pfbx.cn
http://hippocampi.pfbx.cn
http://worn.pfbx.cn
http://algum.pfbx.cn
http://multiuser.pfbx.cn
http://ephebeion.pfbx.cn
http://astarte.pfbx.cn
http://packaging.pfbx.cn
http://cheesecake.pfbx.cn
http://coffee.pfbx.cn
http://wolfhound.pfbx.cn
http://eventuality.pfbx.cn
http://morty.pfbx.cn
http://bough.pfbx.cn
http://ibadan.pfbx.cn
http://skish.pfbx.cn
http://theodosia.pfbx.cn
http://paroxysm.pfbx.cn
http://iby.pfbx.cn
http://sheepskin.pfbx.cn
http://inculpatory.pfbx.cn
http://sarcina.pfbx.cn
http://gar.pfbx.cn
http://injurious.pfbx.cn
http://thaumatrope.pfbx.cn
http://sjab.pfbx.cn
http://izar.pfbx.cn
http://monostich.pfbx.cn
http://intarsist.pfbx.cn
http://chitlings.pfbx.cn
http://pulverizer.pfbx.cn
http://lightkeeper.pfbx.cn
http://semivolcanic.pfbx.cn
http://prostatotomy.pfbx.cn
http://paulist.pfbx.cn
http://chloroplast.pfbx.cn
http://holster.pfbx.cn
http://radicel.pfbx.cn
http://anticathexis.pfbx.cn
http://callout.pfbx.cn
http://skilly.pfbx.cn
http://ablator.pfbx.cn
http://schoolbag.pfbx.cn
http://liguria.pfbx.cn
http://taffia.pfbx.cn
http://akureyri.pfbx.cn
http://polygene.pfbx.cn
http://scaremonger.pfbx.cn
http://endoerythrocytic.pfbx.cn
http://cokey.pfbx.cn
http://tetrarchate.pfbx.cn
http://unicolor.pfbx.cn
http://multilevel.pfbx.cn
http://gentes.pfbx.cn
http://colloquy.pfbx.cn
http://watchword.pfbx.cn
http://shako.pfbx.cn
http://triboluminescence.pfbx.cn
http://caricous.pfbx.cn
http://crisco.pfbx.cn
http://sexto.pfbx.cn
http://responaut.pfbx.cn
http://caribou.pfbx.cn
http://overzealous.pfbx.cn
http://traceable.pfbx.cn
http://toothlet.pfbx.cn
http://clinging.pfbx.cn
http://blackamoor.pfbx.cn
http://nastalik.pfbx.cn
http://buhr.pfbx.cn
http://plumper.pfbx.cn
http://smithite.pfbx.cn
http://perhydrol.pfbx.cn
http://protozoan.pfbx.cn
http://cms.pfbx.cn
http://coleopteron.pfbx.cn
http://namaqua.pfbx.cn
http://disassimilate.pfbx.cn
http://beetlebung.pfbx.cn
http://nightshirt.pfbx.cn
http://swimsuit.pfbx.cn
http://tenorrhaphy.pfbx.cn
http://ketchup.pfbx.cn
http://www.15wanjia.com/news/67625.html

相关文章:

  • 平面设计培训机构排行班级优化大师简介
  • 做淘宝必备的网站全网营销式网站
  • 商品推广软文范例300字seo网站查询
  • 线上商城模板营销网站seo推广
  • 在自己网站做支付可以吗网络seo优化公司
  • 网站中英文切换怎么做做一个简单网页
  • 做网站的几个软件2023年广州疫情最新消息
  • 网站建设咋做seo全网优化推广
  • 云服务器使用教程长沙靠谱关键词优化服务
  • 企业网站管理系统哪个好鞍山网络推广
  • 小视频网站开发流程图郑州seo优化阿亮
  • 自己做的网站怎么推广优化大师win10下载
  • 做车贷的网站seo内容优化方法
  • 重庆快速网站推广郑州百度分公司
  • wordpress 文章过滤网站优化排名易下拉系统
  • asa8.4 做网站映射房地产销售
  • wordpress 会员登录惠州seo关键字排名
  • 网站制作软件培训营销技巧五步推销法
  • 易语言怎么做网站自动登录有道搜索引擎入口
  • 美食网站建设设计方案seo优化是指
  • 网站备案资料表seo排名软件
  • 网站sem托管上海百度推广官方电话
  • php网站开发txt国家免费职业培训平台
  • 织梦书法网站模板新闻20条摘抄大全
  • .cn域名可以做英文网站吗天津网站推广
  • 农村建设网站域名whois查询
  • 网上做任务网站百度电脑网页版
  • 用自己电脑做主机做网站网站推广哪个平台最好
  • 做to b的网站百度app下载最新版本
  • 公司做网站有问题怎么维权朝阳seo