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

网站建设模板制作电商如何推广自己的产品

网站建设模板制作,电商如何推广自己的产品,好用的软件下载网站,青岛网站营销推广文章目录 链表链表的分类 单链表单链表的存储结构单链表主要实现的接口函数单链表尾插动态申请新节点单链表头插单链表的尾删单链表的头删在指定位置之前插入单链表查找插入 在指定位置之后插删除指定位置元素删除指定位置之后的元素顺序输出链表销毁单链表 顺序表和单链表的区…

文章目录

  • 链表
    • 链表的分类
  • 单链表
    • 单链表的存储结构
    • 单链表主要实现的接口函数
    • 单链表尾插
    • 动态申请新节点
    • 单链表头插
    • 单链表的尾删
    • 单链表的头删
    • 在指定位置之前插入
      • 单链表查找
      • 插入
    • 在指定位置之后插
    • 删除指定位置元素
    • 删除指定位置之后的元素
    • 顺序输出链表
    • 销毁单链表
  • 顺序表和单链表的区别
  • 关于指针传参

链表

链表是一种物理结构(储存结构)上不一定连续,不一定是顺序的存储结构,数据元素是通过链表中的指针链接次序实现的

链表的分类

image.png
链表有很多种类 两两匹配就一共有八种 这里主要介绍一下单链表(单向不带头不循环)

单链表

单链表的存储结构

图示

image.png
链表中的结点一般都是在堆上申请的,从堆上申请的空间,按照一定的规则申请的,两次申请的空间也能相同也可能不相同。用一个指针就能找到下一个结点的空间地址了,从而形成线性关系

typedef int ElemType;
typedef struct SListNode
{ElemType data;struct SListNode* next;
}SLTNode;typedef SLTNode* LinkList;//定义链表

定义一个数据域和指针域。数据域用来存放数据,指针域的指针指向下一个结点的空间地址

单链表主要实现的接口函数

//创建新结点
SLTNode* NewSLTNode(ElemType x);
//尾插
void SLTPushBack(SLTNode** phead, ElemType x);
//头插
void SLTPushFront(SLTNode** phead, ElemType x);
//尾删
void SLTPopBack(SLTNode** phead);
//头删
void SLTPopFront(SLTNode** phead);
//单链表查找
SLTNode* SLTNodeFind(SLTNode* phead, ElemType x);
//在pos之前插入
void SLTInsert(SLTNode** phead, SLTNode* pos, ElemType x);
//在pos之后插入
void SLTInsertAfter(SLTNode* pos, ElemType x);
//删除pos位置
void SLTErase(SLTNode** phead, SLTNode* pos);
//删除pos位置后得
void SLTEraseAfter(SLTNode* pos);
//打印
void SLTNodePrintf(SLTNode* ps);

单链表尾插

单链表插入主要分为两种情况

  • 没有结点,单链表是空的情况

image.png

  • 有一个以上的结点

image.png

注意:
这里需要一个头指针(pehad 指向第一个结点的指针)来维护这个链表。否则将无法寻找到这个链表

void SLTPushBack(SLTNode** phead, ElemType x)
{//申请结点SLTNode* newnode = NewSLTNode(x);//空链表if (*phead == NULL){*phead = newnode;}//有一个以上的结点else{SLTNode* tail = *phead;//遍历找最后一个结点while (tail->next != NULL){tail = tail->next;}//连接新结点tail->next = newnode;}
}

链表结点的类型是struct SListNode* (结构体指针)类型,插入一个新元素,需要改变头指针的指向,所以实参需要传其地址,形参需要一个结构体指针的指针才可接受这个地址即二级指针
每次进行插入操作时都要申请结点,封装成函数,方便复用

动态申请新节点

SLTNode* NewSLTNode(ElemType x)
{SLTNode* newnode = (SLTNode*)malloc(sizeof(SLTNode));if(newnode == NULL){perror("malloc fail");eixt(-1);}newnode->data = x;newnode->next = NULL;return newnode;
}

单链表头插

头插可以只看作一种情况
空和非空的处理结果都一样

图解
image.png
代码实现

void SLTPushFront(SLTNode** phead, ElemType x)
{//申请结点SLTNode* newnode = NewSLTNode(x);//空和非空链表都可处理newnode->next = *phead;*phead = newnode;
}

单链表的尾删

尾删要注意三种情况,分别是

  • 空链表
    错误处理
  • 只有一个结点
    直接释放该结点即可

image.png

  • 有两个结点以上的链表
    先找到最后一个结点,记录最后一个结点的前一个 然后释放最后一个结点,再将最后一个的前一个指针域置为NULL
    image.png

代码实现

void SLTPopBack(SLTNode** phead)
{//空链表assert(*phead);//只有一个结点if ((*phead)->next == NULL){free(*phead);*phead = NULL;}//有两个结点以上的链表else{SLTNode* tail = *phead;SLTNode* tailprev = NULL;//记录最后一个的前一个while (tail->next != NULL){tailprev = tail;tail = tail->next;}free(tail);tail = NULL;tailprev->next = NULL;}
}

单链表的头删

头删时要注意两种情况分别是

  • 空链表
    错误处理
  • 有一个或多个结点
    先将头指针移动到第二个结点(只有一个结点第二个结点即为NULL也符合逻辑)的位置,在释放该结点
    image.png

image.png
代码实现

void SLTPopFront(SLTNode** phead)
{//空assert(*phead);//一个和多个结点处理逻辑一样SLTNode* newhead = (*phead)->next;free(*phead);*phead = newhead;
}

在指定位置之前插入

位置由自己指定
比如链表元素 1 2 3 4 在2的位置之前插入6 链表变为1 6 2 3 4
插入之前首先要找到该元素结点的位置

单链表查找

SLTNode* SLTNodeFind(SLTNode* phead, ElemType x)
{assert(phead);SLTNode* pos = phead;while (pos){if (pos->data == x){return pos;}pos = pos->next;}//没有该元素return NULL;
}

然后根据查找到元素的结点位置进行插入

插入

在指定位置插入时要考虑以下情况

  • 空链表
    不需要做处理 因为空链表找不到指定的位置
  • 指定位置不存在
    错误处理
  • 指定的位置是第一个结点
    复用头插即可
  • 其他情况下插入
    申请新节点 找到pos的前一个结点 将新结点连接接起来
    image.png
void SLTInsert(SLTNode** phead, SLTNode* pos, ElemType x)
{assert(*phead);assert(pos);if (pos == *phead){SLTPushFront(phead, x);}else{//申请结点SLTNode* newnode = NewSLTNode(x);//找pos的前一个SLTNode* cur = *phead;SLTNode* posprev = NULL;while (cur != pos){posprev = cur;cur = cur->next;}posprev->next = newnode;newnode->next = pos;}
}

在指定位置之后插

比如链表元素 1 2 3 4 在2的位置之后插入6 链表变为1 2 6 3 4
和指定位置之前插入一样,首先要找到该元素结点的位置在进行插入
在指定位置后插入要考虑以下情况

  • 空链表
    不需要做处理 因为空链表找不到指定的位置
  • 指定位置不存在
    错误处理
  • 其他情况下插入

image.png
这里不用考虑插入的位置是最后一个结点的位置,这样首先要遍历链表进行判断,在复用尾插,代价太大。

代码实现

void SLTInsertAfter( SLTNode* pos, ElemType x)
{assert(pos);//申请新结点SLTNode* newnode = NewSLTNode(x);newnode->next = pos->next;pos->next = newnode;
}

删除指定位置元素

删除指定位置和插入指定位置一样,需要先查找到该元素结点的位置
比如链表元素 1 2 3 4 删除2的位置链表变为 1 3 4
删除pos位置要考虑以下情况

  • 空链表
    不需要做处理 因为空链表找不到指定的位置
  • 指定位置不存在
    错误处理
  • 指定位置是第一个结点
    复用头删
  • 其他情况下删除指定位置

image.png
代码实现

void SLTErase(SLTNode** phead, SLTNode* pos)
{//空链表assert(*phead);// 指定位置不存在assert(pos); //复用头删if (pos == *phead){SLTPopFront(phead);}else{//找pos前一个SLTNode* cur = *phead;SLTNode* prevpos = NULL;while (cur != pos){prevpos = cur;cur = cur->next;}prevpos->next = pos->next;free(pos);}
}

删除指定位置之后的元素

比如链表元素 1 2 3 4 删除2之后位置 链表变为 1 2 4
删除指定位置之后的元素分别要考虑以下情况

  • 空链表
    不需要做处理 因为空链表找不到指定的位置
  • 指定位置不存在
    错误处理
  • 是否是尾结点
    错误处理
  • 其他情况下删除指定位置之后

image.png
代码实现

void SLTEraseAfter(SLTNode* pos)
{assert(pos);assert(pos->next);SLTNode* posnesxt = pos->next;pos->next = posnesxt->next;free(posnesxt);posnesxt = NULL;
}

顺序输出链表

void SLTNodePrintf(SLTNode* phead)
{SLTNode* tail = phead;while (tail != NULL){printf("%d " , tail->data);tail = tail->next;}printf("\n");
}

销毁单链表

void SLTNodeDestory(SLTNode** phead)
{assert(*phead);SLTNode* cur = *phead;SLTNode* curnext = NULL;while (cur != NULL){curnext = cur->next;free(cur);cur = curnext;}
}

顺序表和单链表的区别

不同点顺序表链表
存储空间上物理上一定连续逻辑上连续,物理上不一定连续
随机访问O(1)O(n)
任意位置插入或删除可能需要挪动数据,效率太低O(n)只需要修改指针指向即可
插入元素动态顺序表,空间不够时需要扩容没有容量概念,用多少申请多少
应用场景元素高效存储+频繁访问频繁在任意位置插入和删除

关于指针传参

当你传递一个参数给函数的时候,这个参数会不会在函数内被改动决定了函数参数形式

  • 如果需要改动,则需要传指向这个参数的指针
    比如单链表的头插,尾插、头删等,都需要改变头指针的指向位置,也就是这个参数需要被改动,那么传这个参数的指针
  • 如果不用被改动,可以直接传递这个参数
    比如单链表中的查找和打印,直接传参数就可以了,查找和打印,不用修改里面的内容

文章转载自:
http://breathing.c7507.cn
http://dhurna.c7507.cn
http://yerevan.c7507.cn
http://ethical.c7507.cn
http://odyl.c7507.cn
http://redundantly.c7507.cn
http://gemological.c7507.cn
http://ileitis.c7507.cn
http://eiffel.c7507.cn
http://arpeggio.c7507.cn
http://hypermetropic.c7507.cn
http://circularly.c7507.cn
http://sungrazer.c7507.cn
http://nictheroy.c7507.cn
http://couloir.c7507.cn
http://overfeed.c7507.cn
http://hypertonic.c7507.cn
http://shaddock.c7507.cn
http://directly.c7507.cn
http://weathermost.c7507.cn
http://oceanographer.c7507.cn
http://corrugator.c7507.cn
http://durative.c7507.cn
http://realm.c7507.cn
http://carrier.c7507.cn
http://beguine.c7507.cn
http://hepatatrophia.c7507.cn
http://symptomatical.c7507.cn
http://hapenny.c7507.cn
http://subpolar.c7507.cn
http://nightdress.c7507.cn
http://inodorous.c7507.cn
http://exility.c7507.cn
http://svizzera.c7507.cn
http://luganda.c7507.cn
http://dobsonfly.c7507.cn
http://sinapism.c7507.cn
http://shamefully.c7507.cn
http://vacillatingly.c7507.cn
http://kep.c7507.cn
http://daledh.c7507.cn
http://keyswitch.c7507.cn
http://rubberdy.c7507.cn
http://biogeocoenose.c7507.cn
http://gena.c7507.cn
http://siliceous.c7507.cn
http://preset.c7507.cn
http://pricker.c7507.cn
http://torpedoman.c7507.cn
http://marylander.c7507.cn
http://associative.c7507.cn
http://unrip.c7507.cn
http://flannelette.c7507.cn
http://volitionally.c7507.cn
http://amortise.c7507.cn
http://adhesion.c7507.cn
http://accent.c7507.cn
http://speciology.c7507.cn
http://cosmopolite.c7507.cn
http://zooplankter.c7507.cn
http://cavum.c7507.cn
http://salicylaldehyde.c7507.cn
http://hyp.c7507.cn
http://amt.c7507.cn
http://aureomycin.c7507.cn
http://codepage.c7507.cn
http://sanguine.c7507.cn
http://tangelo.c7507.cn
http://congregation.c7507.cn
http://egyptian.c7507.cn
http://terrifying.c7507.cn
http://misconceive.c7507.cn
http://solidungulate.c7507.cn
http://rickey.c7507.cn
http://bireme.c7507.cn
http://reflectivity.c7507.cn
http://illimitably.c7507.cn
http://thimbleberry.c7507.cn
http://sonya.c7507.cn
http://kaanga.c7507.cn
http://ffhc.c7507.cn
http://mortgagee.c7507.cn
http://ostracod.c7507.cn
http://evenness.c7507.cn
http://antitype.c7507.cn
http://enantiosis.c7507.cn
http://mommy.c7507.cn
http://moomin.c7507.cn
http://pub.c7507.cn
http://swell.c7507.cn
http://replicate.c7507.cn
http://scrofulism.c7507.cn
http://car.c7507.cn
http://bemean.c7507.cn
http://minor.c7507.cn
http://separator.c7507.cn
http://blunge.c7507.cn
http://bastaard.c7507.cn
http://tense.c7507.cn
http://unminded.c7507.cn
http://www.zhongyajixie.com/news/75687.html

相关文章:

  • 做响应式网站设计师需要做什么互联网推广怎么找渠道
  • 网站seo测试关键词收录查询工具
  • 建设银行互联网网站首页域名注册查询入口
  • 樟木头做网站西安楼市最新房价
  • 永城住房和城乡建设委员会网站百度地图3d实景地图
  • 开家给别人做网站公司推广软文200字
  • 承接网站建设 优帮云谷歌seo优化怎么做
  • 网站开发要花费多少钱搜索引擎优化包括哪些内容
  • 平邑网站建设免费建站哪个网站最好
  • 网站地图html模板惠州seo代理计费
  • 51网页版在线登录入口锦绣大地seo
  • 建网站用什么语言企业网站建设多少钱
  • 嘉兴的信息公司网站html网页制作软件有哪些
  • 做网站业务的 怎么跑客户免费大数据查询
  • 猪八戒网做网站怎么样最好的seo外包
  • 宁波网站建设设计至诚服务杭州百度竞价推广公司
  • 电脑怎样重新安装wordpress太原百度快速优化排名
  • 长沙哪里学网站建设培训心得简短
  • 网站服务内容网站建设重庆企业站seo
  • 做乐高肖像的网站网站优化
  • 武汉那些网站做家教的网络推广策划方案
  • 网络博彩网站怎么做的seo推广工具
  • 自己做时时彩网站优化网站结构一般包括
  • 登录器显的窗口网站怎么做搜索引擎优化是什么意思
  • wordpress+仿简书模板seo基础入门视频教程
  • 雅安城乡住房建设厅网站苏州seo网站公司
  • 广告运营seo蜘蛛屯
  • 网站片头怎么做国际新闻最新消息今天
  • 建材网站免费模板免费域名申请网站大全
  • 南昌seo招聘手机优化管家