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

公司网站制作怎么弄简述网络营销的含义

公司网站制作怎么弄,简述网络营销的含义,wordpress用户分组,微信打卡小程序怎么弄目录 一、线性表 二、顺序表 2.1概念及结构 2.2接口实现 2.3动态顺序表的创建 2.3动态顺序表的初始化 2.3.1传值初始化 2.3.2传址初始化 2.4动态顺序表的清空 2.5动态顺序表的扩容 2.6动态顺序表内容的打印 三、动态顺序表的使用 3.1尾插尾删 3.1.1尾插 3.1.2尾删…

目录

一、线性表

二、顺序表

2.1概念及结构

2.2接口实现

2.3动态顺序表的创建

2.3动态顺序表的初始化

2.3.1传值初始化

2.3.2传址初始化

2.4动态顺序表的清空

2.5动态顺序表的扩容

2.6动态顺序表内容的打印

三、动态顺序表的使用

3.1尾插尾删

3.1.1尾插

3.1.2尾删

3.2头插头删

3.2.1头插

3.2.2头删

3.3在pos位置插入x

3.4删除pos位置的值

3.5修改某个位置的值

四、完整代码


一、线性表

线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使
用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串...
线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,
线性表在物理上存储时,通常以数组和链式结构的形式存储。

二、顺序表

2.1概念及结构

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

顺序表一般分为:

静态顺序表:使用定长数组储存元素

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

 

缺点:不是很灵活

动态顺序表:使用动态开辟的数组储存。

2.2接口实现

静态顺序表只适用于确定知道需要存多少数据的场景。静态顺序表的定长数组导致N定大了,空
间开多了浪费,开少了不够用。所以现实中基本都是使用动态顺序表,根据需要动态的分配空间
大小,所以下面我们实现动态顺序表。

所谓动态其实指的这个结构体里的指针是动态内存开辟来的,是可变的,用的时候动态开辟,不够的话继续开辟,程序结束的时候释放。

2.3动态顺序表的创建

typedef int SLDatatype;//将int重命名为SLDatatype
typedef struct SeqList
{SLDatatype* a;//指向动态开辟的数组SLDatatype capacity;//容量SLDatatype size;//有效数据的个数}SL;//将结构体SeqList重命名为SL

2.3动态顺序表的初始化

2.3.1传值初始化

//传值初始化
void SLInit(SL s)
{s.a = NULL;s.size = 0;s.capacity = 0;
}

 函数那个章节我们学过形参只是实参的临时拷贝,并没有实际作用,生命周期短,出了函数的作用域就会销毁,我们不考虑这种初始化方式。

2.3.2传址初始化

//传址初始化
void SLInit(SL* ps)
{ps->a = 0;ps->capacity = 0;ps->size = 0;
}
void SLInit(SL* ps)
{ps->a = (SLDatatype*)malloc(sizeof(SLDatatype) * 4);//开辟了4个字节的空间if (ps->a == NULL){perror("malloc failed");exit(-1);}ps->capacity = 4;//开辟了空间就要给容量赋值ps->size = 0;
}

上面两种初始化方式都可以给予结构体成员变量赋值,但是我们使用第二种,因为第二种为我们开辟了空间。


2.4动态顺序表的清空

void SLDestr(SL* ps)
{free(ps->a);ps->a = NULL;ps->capacity = 0;//内存释放,容量清零ps->size = 0;//内存释放,有效数据清零
}

2.5动态顺序表的扩容

void SLCheckcapacity(SL* ps)
{if (ps->size == ps->capacity){SLDatatype* tmp = (SLDatatype*)realloc(ps->a, ps->capacity * 2 *( sizeof(SLDatatype)));//扩容尾原来的倍数if (tmp == NULL)//判断是否扩容失败{perror("realloc failed");exit(-1);}ps->a = tmp;ps->capacity *= 2;//扩容后修改原来的容量}
}

这就是所谓的动态,当我们空间不够时,就需要开辟新的空间,使用realloc函数要注意是否开辟成功,定义一个中间指针,当开辟成功时将这个指针赋值给动态数组中的指针。 

2.6动态顺序表内容的打印

void SLprint(SL* ps)
{int i = 0;for (i = 0; i < ps->size; i++){printf("%d ", ps->a[i]);}printf("\n");
}

size为有效数据个数,使用循环打印其中的有效数据。 

三、动态顺序表的使用

3.1尾插尾删

3.1.1尾插

void SLPushBack(SL* ps, SLDatatype x)
{SLCheckcapacity(ps);//检查空间是否足够插入ps->a[ps->size] = x;//赋值ps->size++;//插入一个有效数据,有效数据个数加一
}

 首先一定要检查规矩是否足够,根据上面开辟的空间,容量为4,有效数据为size为0,所以从第一个空间开始插入数据。

3.1.2尾删

//尾删
void SLPopBack(SL* ps)
{assert(ps->size > 0);//判断是否会造成越界if (ps->size == 0){return;}ps->size--;//删除一个数据,有效数据个数减一
}

插入数据后size的大小也会变化,数组中最后一个数字的下标刚好和size的大小一样我们只需要将size减1就行。 

3.2头插头删

3.2.1头插

void SLPushFront(SL* ps, SLDatatype x)
{SLCheckcapacity(ps);//检查空间是否足够int end = ps->size;while (end > 0){ps->a[end] = ps->a[end - 1];//将前一个数据后移动end--;}ps->a[0] = x;//将x赋给初始位置ps->size++;//加入一个数字,有效数据个数加1
}

 老规矩一定要检查空间是否足够,头部插入数据我们只需要将原来的数据往后移动一格就将第一格的位置空出来,再将数值插入就行,插入一个数据,有效数据加1即可。

3.2.2头删

void SLPopFront(SL* ps)
{assert(ps->size > 0);//防止越界访问if (ps->size==0){return;}int begin = 0;while (begin < ps->size){ps->a[begin] = ps->a[begin+1];//将后一个数据往前移动begin++;}ps->size--;//减少一个数字,有效数据减1
}

这里的删除并不是真正意义上的删除,我们只需要将原来的数据往前移动一位使后一位的数据覆盖在前一位,这就做到了删除,顺便再将有效数据减1就行。 

3.3在pos位置插入x

void SLInsert(SL* ps, int pos, int x)
{assert(pos >= 0 && pos <= ps->size);//防止越界访问SLCheckcapacity(ps);int end = ps->size;while (end >=pos){ps->a[end] = ps->a[end-1];//和头插的思想差不多,将数据后移end--;}ps->a[pos] = x;//将x赋值给pos位置ps->size++;//有效数据加1
}

我们可以这样理解:将pos看成初始位置,是不是就转化为头插了?按照头插的思想就可以完成在pos位置上插入x。 

3.4删除pos位置的值

void SLErase(SL* ps, int pos)
{assert(pos >= 0 && pos <= ps->size);//防止越界访问SLCheckcapacity(ps);int begin = pos;while (begin < ps->size){ps->a[begin] = ps->a[begin + 1];//和头删的思想差不多,将数据前移begin++;}ps->size--;//有效数据减1
}

我们会发现3.4和3.5不仅可以做到某个位置值的插入和删除,也可以做到尾插尾删和头插头删。 

3.5修改某个位置的值

void SLModify(SL* ps, SLDatatype pos, SLDatatype x)
{assert(pos >= 0 && pos < ps->size);//防止越界ps->a[pos] = x;
}

 这样修改某个位置的值看起来是挺麻烦,但是是为了安全考虑。

四、完整代码

#define _CRT_SECURE_NO_WARNINGS 67
#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
//静态顺序表
//#define N 100
//struct SeqList
//{
//	int a[N];//定长数组
//	int size;//有效数据的个数
//};//动态顺序表//创建
typedef int SLDatatype;
typedef struct SeqList
{SLDatatype* a;//指向动态开辟的数组SLDatatype capacity;//容量SLDatatype size;//有效数据的个数}SL;
//传值初始化
//void SLInit(SL s)
//{
//	s.a = NULL;
//	s.size = 0;
//	s.capacity = 0;
//}
//传址初始化
//void SLInit(SL* ps)
//{
//	ps->a = 0;
//	ps->capacity = 0;
//	ps->size = 0;
//}
void SLInit(SL* ps)
{ps->a = (SLDatatype*)malloc(sizeof(SLDatatype) * 4);//开辟了4个字节的空间if (ps->a == NULL){perror("malloc failed");exit(-1);}ps->capacity = 4;ps->size = 0;
}
//清空
void SLDestr(SL* ps)
{free(ps->a);ps->a = NULL;ps->capacity = 0;ps->size = 0;
}
//打印
void SLprint(SL* ps)
{int i = 0;for (i = 0; i < ps->size; i++){printf("%d ", ps->a[i]);}printf("\n");
}
//检查容量
void SLCheckcapacity(SL* ps)
{if (ps->size == ps->capacity){SLDatatype* tmp = (SLDatatype*)realloc(ps->a, ps->capacity * 2 *( sizeof(SLDatatype)));//扩容尾原来的倍数if (tmp == NULL){perror("realloc failed");exit(-1);}ps->a = tmp;ps->capacity *= 2;}
}
//尾插
void SLPushBack(SL* ps, SLDatatype x)
{SLCheckcapacity(ps);ps->a[ps->size] = x;ps->size++;
}
//尾删
void SLPopBack(SL* ps)
{assert(ps->size > 0);if (ps->size == 0){return;}ps->size--;
}
//头插
void SLPushFront(SL* ps, SLDatatype x)
{SLCheckcapacity(ps);int end = ps->size;while (end > 0){ps->a[end] = ps->a[end - 1];end--;}ps->a[0] = x;ps->size++;
}
//头删
void SLPopFront(SL* ps)
{assert(ps->size > 0);if (ps->size==0){return;}int begin = 0;while (begin < ps->size){ps->a[begin] = ps->a[begin+1];begin++;}ps->size--;
}
//在pos位置插入x
void SLInsert(SL* ps, int pos, int x)
{assert(pos >= 0 && pos <= ps->size);SLCheckcapacity(ps);int end = ps->size;while (end >=pos){ps->a[end] = ps->a[end-1];end--;}ps->a[pos] = x;ps->size++;
}
//删除pos位置的值
void SLErase(SL* ps, int pos)
{assert(pos >= 0 && pos <= ps->size);SLCheckcapacity(ps);int begin = pos;while (begin < ps->size){ps->a[begin] = ps->a[begin + 1];begin++;}ps->size--;
}
int SLFind(SL* ps, int x)
{int i = 0;for (i = 0; i < ps->size; i++){if (ps->a[i] == x)return i;}return -1;
}void SLModify(SL* ps, SLDatatype pos, SLDatatype x)
{assert(pos >= 0 && pos < ps->size);ps->a[pos] = x;
}
int main()
{SL s1;//传值初始化//SLInit(s1);//传址初始化SLInit(&s1);//尾插SLPushBack(&s1, 1);SLPushBack(&s1, 2);SLPushBack(&s1, 3);SLPushBack(&s1, 4);SLPushBack(&s1, 5);SLPushBack(&s1, 6);SLPushBack(&s1, 7);//尾插测试printf("尾插:\n");SLprint(&s1);//尾删SLPopBack(&s1);//尾删测试printf("尾删:\n");SLprint(&s1);//头插SLPushFront(&s1,10);//头插测试printf("头插:\n");SLprint(&s1);//头删 SLPopFront(&s1);//头删测试printf("头删:\n");SLprint(&s1);//在pos位置插入xSLInsert(&s1, 0, 100);//pos插入x测试printf("pos位置插入x\n");SLprint(&s1);//删除pos位置的值SLErase(&s1, 0);//测试printf("删除pos位置的值\n");SLprint(&s1);//改SLModify(&s1, 2, 1);printf("修改某个位置上的值:\n");//SLprint(&s1);//清空SLDestr(&s1);return 0;
}

 


文章转载自:
http://wanjiachemotactic.nLcw.cn
http://wanjiaswedish.nLcw.cn
http://wanjiamartini.nLcw.cn
http://wanjiaperfective.nLcw.cn
http://wanjiamoralise.nLcw.cn
http://wanjialitek.nLcw.cn
http://wanjiafriable.nLcw.cn
http://wanjiaazotobacter.nLcw.cn
http://wanjiacapper.nLcw.cn
http://wanjiapizzicato.nLcw.cn
http://wanjialaminitis.nLcw.cn
http://wanjiaresultant.nLcw.cn
http://wanjiadruggist.nLcw.cn
http://wanjiapederasty.nLcw.cn
http://wanjiamankey.nLcw.cn
http://wanjiatcbm.nLcw.cn
http://wanjiaphosphonium.nLcw.cn
http://wanjiavilifier.nLcw.cn
http://wanjiaacinaciform.nLcw.cn
http://wanjiacountryfolk.nLcw.cn
http://wanjiauft.nLcw.cn
http://wanjiaoaves.nLcw.cn
http://wanjiaryukyuan.nLcw.cn
http://wanjiacarlsruhe.nLcw.cn
http://wanjiapedagogical.nLcw.cn
http://wanjiadab.nLcw.cn
http://wanjiafattest.nLcw.cn
http://wanjiaautocratically.nLcw.cn
http://wanjialeadswinger.nLcw.cn
http://wanjiatiltyard.nLcw.cn
http://wanjiadoghole.nLcw.cn
http://wanjiapicong.nLcw.cn
http://wanjiaablaut.nLcw.cn
http://wanjiaathwart.nLcw.cn
http://wanjiabigaroon.nLcw.cn
http://wanjiapc.nLcw.cn
http://wanjiaburton.nLcw.cn
http://wanjiancte.nLcw.cn
http://wanjiaplp.nLcw.cn
http://wanjiaabstinent.nLcw.cn
http://wanjiacoowner.nLcw.cn
http://wanjiagoulash.nLcw.cn
http://wanjiaeris.nLcw.cn
http://wanjiacolidar.nLcw.cn
http://wanjiaphosphorylate.nLcw.cn
http://wanjiatuvalu.nLcw.cn
http://wanjiaarbalest.nLcw.cn
http://wanjialalique.nLcw.cn
http://wanjiafourteenth.nLcw.cn
http://wanjiaenswathement.nLcw.cn
http://wanjiamandarin.nLcw.cn
http://wanjiarajahmundry.nLcw.cn
http://wanjiashiftability.nLcw.cn
http://wanjiafilthy.nLcw.cn
http://wanjiaemblema.nLcw.cn
http://wanjiacontactor.nLcw.cn
http://wanjiabestrode.nLcw.cn
http://wanjiaalas.nLcw.cn
http://wanjiadisulfide.nLcw.cn
http://wanjiaroundeye.nLcw.cn
http://wanjiasubchairman.nLcw.cn
http://wanjiavalve.nLcw.cn
http://wanjiaratan.nLcw.cn
http://wanjiacardiorespiratory.nLcw.cn
http://wanjiahydroformer.nLcw.cn
http://wanjiaccst.nLcw.cn
http://wanjiaclonesome.nLcw.cn
http://wanjiacardiotoxic.nLcw.cn
http://wanjiaboulter.nLcw.cn
http://wanjiaempiricist.nLcw.cn
http://wanjiabluehearts.nLcw.cn
http://wanjialiechtenstein.nLcw.cn
http://wanjiatriennium.nLcw.cn
http://wanjiasofa.nLcw.cn
http://wanjiavig.nLcw.cn
http://wanjiaaniconism.nLcw.cn
http://wanjiasecessionism.nLcw.cn
http://wanjiathrust.nLcw.cn
http://wanjiamisthink.nLcw.cn
http://wanjiaegality.nLcw.cn
http://www.15wanjia.com/news/105862.html

相关文章:

  • 个性化网站定制杭州百度推广
  • 关于建设 医院网站的请示短视频seo询盘系统
  • 房地产设计网站品牌运营包括哪些内容
  • 网页设计制作网站模板免费seo在线排名优化
  • 免费作图软件网站制作优化
  • 做ppt如何从网站插入视频域名权重查询
  • 女人做一级a网站免费软件培训机构有哪些?哪个比较好
  • 哪些网站建设公司附子seo教程
  • 门户型网站建设google关键词分析
  • 佛山新网站建设方案全球新冠疫情最新消息
  • 哪些网站容易做游戏推广接单平台
  • 做网站激励语西安今日头条新闻
  • 好的销售网站网络营销渠道的功能
  • 定制网站开发流程头条新闻 最新消息条
  • 广西网络营销外包公司seoaoo
  • 上海浦东新区毕节地seo
  • 做网站建设平台上海网络推广优化公司
  • 如何建设一个自己 的网站爱站网站
  • 江华网站建设中国最大的企业培训公司
  • wordpress主题zhixinaseo百度快照优化公司
  • 网站可以给pdf做笔记百度发布
  • 长春网站制作网络推广简述获得友情链接的途径
  • 日照网站建建设百度快速排名软件
  • 如何做房地产网站模板建站价格
  • 淮安网站建设报价北京网站seo招聘
  • 网站制作什么样的字体好看安徽seo网络推广
  • app和手机网站广州seo和网络推广
  • seo技术团队厦门seo顾问屈兴东
  • 怎么自己做论坛网站吗百度小程序
  • 网站设计项目计划书2023年适合小学生的新闻