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

如何海外网站建设关键词优化举例

如何海外网站建设,关键词优化举例,移动互联网企业有哪些,物流公司响应式网站建设🌇个人主页:平凡的小苏 📚学习格言:别人可以拷贝我的模式,但不能拷贝我不断往前的激情 🛸C语言专栏:https://blog.csdn.net/vhhhbb/category_12174730.html 🚀数据结构专栏&#xff…

🌇个人主页:平凡的小苏

📚学习格言:别人可以拷贝我的模式,但不能拷贝我不断往前的激情

🛸C语言专栏:https://blog.csdn.net/vhhhbb/category_12174730.html

🚀数据结构专栏:https://blog.csdn.net/vhhhbb/category_12211053.html

        家人们更新不易,你们的👍点赞👍和⭐关注⭐真的对我真重要,各位路过的友友麻烦多多点赞关注,欢迎你们的私信提问,感谢你们的转发!

        关注我,关注我,关注我,你们将会看到更多的优质内容!!

目录

1、顺序表概念

2、函数接口的实现

2.1、顺序表的初始化

2.2、顺序表的插入操作

2.3、顺序表的删除操作 

2.4、顺序表的插入和删除的时间复杂度

2.5、线性表的顺序存储结构的优缺点

2.6、顺序表的查找

2.7、顺序表的销毁

3、顺序表源码

SList.c

SList.h

Test.c


 

1、顺序表概念

线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素

  • 线性表的存储结构,说白了,就是在内存中找块地儿,通过占位的形式,把一块内存空间给占了,然后把相同数据类型的数据元素依次存放在这块空地中。既然线性表的每个数据都相同,所以可以用C语言(其他语言也相同)的一维数组来实现顺序存储结构,即把第一个数据元素存到数组下标为0的位置中,接着把线性表相邻的元素存储在数组中相邻的位置。

2、函数接口的实现

  来看线性表顺序存储的结构代码。

#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
#define InitCapa 4;//初始容量
typedef int SLDateType;
typedef struct SeqList
{SLDateType* a; //动态分配数组,存储数据元素int size;//数组元素个数int capacity;//数组容量的大小
}SeqList;

2.1、顺序表的初始化

void SeqListInit(SeqList* ps)
{assert(ps);ps->a = (SLDateType*)malloc(sizeof(SLDateType) * 4);ps->size = 0;ps->capacity = InitCapa;
}

注:顺序表的初始化首先要动态分配容量为4的数组。数组元素的个数初始化为0.

2.2、顺序表的插入操作

         我们现在来考虑,如果要实现线性的插入操作,即在顺序表的第i个位置插入新元素e,应该如何操作?

        举个栗子,本来我们在春运时去买火车票,大家都排队排的好好的。这时来了一个抱着孩子的年轻妈妈,对着队伍中排在第三位的你说,“大哥,求求你帮帮忙,我家里母亲有病,我得急着回去看她,你看我还抱着孩子,这队伍这么长,你可否让我排在你的前面,你心一软,就同意了。这时,你必须得退后一步。骂声四起。但后面得人不清楚这加塞是怎么回事,没什么办法。

        这个例子已经说明了线性表得顺序存储结构,在插入数据时得实现过程(如下图所示)

实现代码如下:

void CheckCapacity(SeqList* ps)
{if (ps->size == ps->capacity){SLDateType* tmp = (SLDateType*)realloc(ps->a,sizeof(SLDateType) * ps->capacity * 2);if (tmp == NULL){perror("realloc fail:");exit(-1);}ps->capacity *= 2;ps->a = tmp;}
}
void SeqListInsert(SeqList* ps, int pos, SLDateType x)
{assert(ps);CheckCapacity(ps);//检查容量函数,只要是插入元素得操作,都应该检查容量int end = ps->size-1;while (end >= pos)//每个元素往后移动{ps->a[end + 1] = ps->a[end];end--;}ps->a[pos] = x;ps->size++;
}

 插入算法得思路:

(1)如果顺序表得长度大于等于数组长度,则动态增加容量;

(2)从最后一个元素开始向前遍历到第i个位置,分别将它们都向后移动一个位置;

(3)将要插入得元素填入位置i处

(4)表长加1;

2.3、顺序表的删除操作 

        接着刚才的栗子。此时后面的人群意见都很大,都说怎么可以这样,不管什么原因,插队就是不行,有本事,找火车站开后门去。就在这时,远处跑来一胖子,对着这个美女喊,可找到你了,你这个骗子,还我钱。只见女子二话不说,突然就冲出了队伍,胖子追在其后。哦,原来她是倒卖火车票的黄牛,刚才还在装可怜。于是排队的人群,又像蠕虫一样,都向前移动了一步,骂声渐息,队伍又恢复了平静。

        这就是顺序表的顺序存储结构的删除元素的过程实现(如下图所示)

实现代码如下:

void SeqListErase(SeqList* ps, int pos)
{assert(ps);assert(ps->size);//如果容量为0,就抛出异常,不可以再删除int begin = pos;while (begin < ps->size-1){ps->a[begin] = ps->a[begin + 1];begin++;}ps->size--;
}

 删除算法的思路:

(1)从删除元素位置开始遍历到最后一个元素位置,分别将它们都向前移动一个位置;

(2)表长减1;

2.4、顺序表的插入和删除的时间复杂度

  •  先看最好的情况,如果元素要插入到最后一个位置,或者删除最后一个元素时的时间复杂度为O(1),因为不需要移动元素。
  • 最坏的情况呢,如果元素要插入到第一个位置或者删除第一个元素,此时的时间复杂度是多少呢?这就意味着要移动所有的元素向后或者向前,所以这个时间复杂度为O(n).

2.5、线性表的顺序存储结构的优缺点

优点:

  • 无需为表示表中的元素之间的逻辑关系而增加额外的存储空间
  • 可以快速地存取表中任意位置的元素

缺点:

  • 插入和删除的操作需要移动大量的元素

2.6、顺序表的查找

实现代码如下:

int SeqListFind(SeqList* ps, SLDateType x)
{assert(ps);for (int i = 0; i < ps->size; i++){if (ps->a[i] == x){return i;}}return -1;
}

注:就是遍历查找的过程

2.7、顺序表的销毁

 实现代码如下:

void SeqListDestroy(SeqList* ps)
{assert(ps);free(ps->a);ps->size = ps->capacity = 0;ps->a = NULL;
}

3、顺序表源码

SList.c

//SList.c
#include"SList.h"
void SeqListInit(SeqList* ps)
{assert(ps);ps->a = (SLDateType*)malloc(sizeof(SLDateType) * 4);ps->size = 0;ps->capacity = InitCapa;
}void CheckCapacity(SeqList* ps)
{if (ps->size == ps->capacity){SLDateType* tmp = (SLDateType*)realloc(ps->a,sizeof(SLDateType) * ps->capacity * 2);if (tmp == NULL){perror("realloc fail:");exit(-1);}ps->capacity *= 2;ps->a = tmp;}
}
void SeqListPushBack(SeqList* ps, SLDateType x)
{assert(ps);CheckCapacity(ps);ps->a[ps->size] = x;ps->size++;
}
void SeqListPopBack(SeqList* ps)
{assert(ps->size);ps->size--;
}
void SeqListPopFront(SeqList* ps)
{//assert(ps);//assert(ps->size);//int begin = 0;//int end = 1;//while (end < ps->size)//{//	ps->a[begin] = ps->a[end];//	begin++;//	end++;//}//ps->size--;SeqListErase(ps, 0);
}
void SeqListPushFront(SeqList* ps, SLDateType x)
{//assert(ps);//CheckCapacity(ps);//int end = ps->size;//int begin = ps->size - 1;//while (begin >= 0)//{//	ps->a[end] = ps->a[begin];//	begin--;//	end--;//}//ps->a[0] = x;//ps->size++;SeqListInsert(ps, 0, x);
}
int SeqListFind(SeqList* ps, SLDateType x)
{assert(ps);for (int i = 0; i < ps->size; i++){if (ps->a[i] == x){return i;}}return -1;
}
void SeqListInsert(SeqList* ps, int pos, SLDateType x)
{assert(ps);CheckCapacity(ps);int end = ps->size-1;while (end >= pos){ps->a[end + 1] = ps->a[end];end--;}ps->a[pos] = x;ps->size++;
}
void SeqListErase(SeqList* ps, int pos)
{assert(ps);assert(ps->size);int begin = pos;while (begin < ps->size-1){ps->a[begin] = ps->a[begin + 1];begin++;}ps->size--;
}
void SeqListPrint(SeqList* ps)
{for (int i = 0; i < ps->size; i++){printf("%d ", ps->a[i]);}printf("\n");
}void SeqListDestroy(SeqList* ps)
{assert(ps);free(ps->a);ps->size = ps->capacity = 0;ps->a = NULL;
}

SList.h

#pragma once
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
#define InitCapa 4;
typedef int SLDateType;
typedef struct SeqList
{SLDateType* a;int size;int capacity;
}SeqList;// 对数据的管理:增删查改 
void SeqListInit(SeqList* ps);
void SeqListDestroy(SeqList* ps);void SeqListPrint(SeqList* ps);
void SeqListPushBack(SeqList* ps, SLDateType x);
void SeqListPushFront(SeqList* ps, SLDateType x);
void SeqListPopFront(SeqList* ps);
void SeqListPopBack(SeqList* ps);// 顺序表查找
int SeqListFind(SeqList* ps, SLDateType x);
// 顺序表在pos位置插入x
void SeqListInsert(SeqList* ps, int pos, SLDateType x);
// 顺序表删除pos位置的值
void SeqListErase(SeqList* ps, int pos);

注:这里的尾插、头插、尾删、头删都是插入删除函数的复用 

Test.c

 

#include"SList.h"
void TestSList()
{SeqList SL;SeqListInit(&SL);SeqListPushBack(&SL, 1);SeqListPushBack(&SL, 2);SeqListPushBack(&SL, 3);SeqListPushBack(&SL, 4);SeqListPrint(&SL);SeqListInsert(&SL, 1, 5);SeqListInsert(&SL, 1, 6);SeqListPrint(&SL);SeqListDestroy(&SL);
}
int main()
{TestSList();return 0;
}

好了!!!小编的分享到这里就结束了,想要继续了解数据结构的知识的,敬请期待博主的更新,有什么不足的地方请各位大佬多多指教!!!

http://www.mmbaike.com/news/47569.html

相关文章:

  • 大型网站的优化方法广告公司
  • 网站备案 企业 个人宁波seo费用
  • 网站免费正能量破解版河南最新消息
  • 自己建网站怎么做seoseo排名优化公司价格
  • 最专业的网站设计app注册推广任务平台
  • 旅游网站建设初衷成都最新疫情
  • 济南做网站建设的公司app推广公司怎么对接业务
  • 网站建设管理 税务自助建站申请
  • wordpress可以做门户网站7月新闻大事件30条
  • 成都网站开发等项目外包公司网站统计
  • 建个商城网站多少钱今日头条十大新闻
  • 手机动态网站开发百度关键词代做排名
  • 如何用表格做网站网络营销与传统营销有哪些区别
  • 重庆品牌网站建设公司外贸业务推广
  • 无锡网站建设选千客云网络郑州网站优化推广
  • 上海idc机房托管seo怎么做优化计划
  • 广州建网站哪家最好广点通
  • 保山网站建设哪家好佛山网站建设
  • 郑州网站建设及托管百度竞价推广投放
  • 做网站买域名要多少钱seo人员的职责
  • 怀柔网站建设推广淘宝店铺转让价格表
  • 做外汇的官方网站采集站seo课程
  • 国家认可提升学历正规机构哪个杭州seo好
  • 东莞网站优化哪里找网络营销渠道名词解释
  • 怎么用宝塔做网站站长工具seo综合查询columbu cat
  • 微信域名防封跳转系统重庆seo软件
  • 什么网站可以做二建的题目企业seo的措施有哪些
  • 微教育云平台网站建设google建站推广
  • 网站推广方案及预算seo培训机构哪家好
  • 观澜网站建设公司网络营销和传统营销的区别和联系