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

复制网站文章微博指数

复制网站文章,微博指数,网站当前位置 样式,wordpress媒体库管理系统🔥个人主页:草莓熊Lotso 🎬作者简介:C研发方向学习者 📖个人专栏: 《C语言》 《数据结构与算法》《C语言刷题集》《Leetcode刷题指南》 ⭐️人生格言:生活是默默的坚持,毅力是永久的…

🔥个人主页:@草莓熊Lotso

🎬作者简介:C++研发方向学习者

📖个人专栏: 《C语言》 《数据结构与算法》《C语言刷题集》《Leetcode刷题指南》

⭐️人生格言:生活是默默的坚持,毅力是永久的享受。 

前言:在上篇博客中我们已经完成了顺序表的头插,尾插,头删,尾删等接口。今天博主将带大家实现顺序表中剩下的几个接口,还是一样,先分开来实现,最后为大家展示总的代码。


目录

一.顺序表的指定位置查找

二.顺序表的指定位置插入

三.顺序表的指定位置删除 

四.顺序表的修改和销毁

 五.代码展现

SeqList.h:

SeqList.c:

test.c:


一.顺序表的指定位置查找

--指定位置的插入和删除我们都需要先找到指定位置,才能继续往下实现。所以我们先来实现下这一个接口吧。

SeqList.c:

//查找
int SLFind(SL* ps, SLdatatype x)
{for (int i = 0; i < ps->size; i++){if (ps->arr[i] == x)return i;}return -1;//返回一个无效坐标
}

重点提示:

 这里的查找实现很简单,遍历数组,找到了对应元素就返回它的对应下标,没找到就返回一个无效坐标-1。

test.c:

#include"SeqList.h"void test1()
{SL s;SLInit(&s);SLPushBack(&s, 1);SLPushBack(&s, 2);SLPushBack(&s, 3);SLPushBack(&s, 4);SLPrint(&s);//1 2 3 4int pos=SLFind(&s,2);if (pos == -1)printf("找不到\n");elseprintf("找到了,下标为%d\n",pos);
}int main()
{test1();
}

--测试出来没有问题,可以找到元素2,下标为1。 


二.顺序表的指定位置插入

--通过前面查找接口的实现,我们可以继续来实现我们的指定位置插入了

SeqList.c:

//在pos前插入
void SLInsert(SL* ps, int pos, SLdatatype x)
{assert(ps);assert(pos >= 0 && pos < ps->size);for (int i = ps->size; i > pos; i--){ps->arr[i] = ps->arr[i - 1];}ps->arr[pos] = x;ps->size++;
}

重点提示:

先断言,ps!=NULL,pos的范围是[0,ps->size);i从ps->size开始,到一直到i=pos结束,按从后往前的顺序依次向后移动一位,然后把插入的数据放在pos位置,最后ps->size++。

test.c:

#include"SeqList.h"void test1()
{SL s;SLInit(&s);SLPushBack(&s, 1);SLPushBack(&s, 2);SLPushBack(&s, 3);SLPushBack(&s, 4);SLPrint(&s);//1 2 3 4int pos=SLFind(&s,2);SLInsert(&s, pos, 7);SLPrint(&s);// 1 7 2 3 4
}int main()
{test1();
}

 --测试完没有问题,在指定位置插入了数据7,最后结果正确。


三.顺序表的指定位置删除 

 SeqList.c:

//删除pos位置的元素
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--;
}

重点提示:

断言的部分跟指定位置插入一样,i从pos开始,直到i=ps->size-1时结束,按从前往后的顺序依次向前移动,如图所示,覆盖掉pos位置的数据,最后直接ps->size--。


四.顺序表的修改和销毁

SeqList.c:

//修改
void SLModify(SL* ps, int pos, SLdatatype x)
{assert(ps);ps->arr[pos] = x;
}

 重点提示:

找到pos位置,把这个位置的值修改就行了,很简单没有什么特别难的地方

//销毁
void SLDestory(SL* ps)
{if(ps->arr)free(ps->arr);ps->arr = NULL;ps->size = 0;ps->capacity = 0;
}

重点提示: 

free掉ps->arr后,将所有的都恢复初始化状态

test.c: 

#include"SeqList.h"void test1()
{SL s;SLInit(&s);SLPushBack(&s, 1);SLPushBack(&s, 2);SLPushBack(&s, 3);SLPushBack(&s, 4);SLPrint(&s);//1 2 3 4int pos=SLFind(&s,2);SLInsert(&s, pos, 7);SLPrint(&s);// 1 7 2 3 4SLErase(&s, pos);SLPrint(&s);//1 2 3 4SLModify(&s, pos, 6);SLPrint(&s);//1 6 3 4SLDestory(&s);//SLPushFront(&s, 5);//SLPrint(&s);// 5 1 2 3 4//SLPopBack(&s);//SLPopBack(&s);//SLPrint(&s);// 5 1 2//SLPopFront(&s);//SLPrint(&s);//1 2
}int main()
{test1();
}

 --测试完没有问题,成功把pos位置的修改成6,最后销毁


 五.代码展现

SeqList.h:

#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>typedef int SLdatatype;
typedef struct SeqList
{SLdatatype* arr;int size;int capacity;
}SL;//顺序表初始化
void SLInit(SL* ps);//打印顺序表
void SLPrint(SL* ps);//尾插
void SLPushBack(SL* ps, SLdatatype x);
//头插
void SLPushFront(SL* ps, SLdatatype x);
//尾删
void SLPopBack(SL* ps);
//头删
void SLPopFront(SL* ps);
//查找
int SLFind(SL* ps, SLdatatype x);
//在pos前插入
void SLInsert(SL* ps, int pos, SLdatatype x);
//删除pos位置的元素
void SLErase(SL* ps, int pos);
//修改
void SLModify(SL* ps, int pos, SLdatatype x);
//销毁
void SLDestory(SL* ps);

SeqList.c:

#define _CRT_SECURE_NO_WARNINGS
#include"SeqList.h"//初始化
void SLInit(SL* ps)
{ps->arr = NULL;ps->size = 0;ps->capacity = 0;
}//打印
void SLPrint(SL* ps)
{for (int i = 0; i < ps->size; i++){printf("%d ", ps->arr[i]);}printf("\n");
}
//检查空间
void SLCheckCapacity(SL*ps)
{//扩容int newcapacity = ps->capacity == 0 ? 4 : 2 * ps->capacity;SLdatatype* tmp = (SLdatatype*)realloc(ps->arr, newcapacity * sizeof(SLdatatype));if (tmp == NULL){perror("realloc");exit(1);}ps->arr = tmp;ps->capacity = newcapacity;
}//尾插
void SLPushBack(SL* ps, SLdatatype x)
{//检查空间是否足够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--){ps->arr[i] = ps->arr[i - 1];}ps->arr[0] = x;ps->size++;
}//尾删
void SLPopBack(SL* ps)
{assert(ps && ps->size);ps->size--;
}//头删
void SLPopFront(SL* ps)
{assert(ps && ps->size);for (int i = 0; i < ps->size - 1; i++){ps->arr[i] = ps->arr[i + 1];}ps->size--;
}//查找
int SLFind(SL* ps, SLdatatype x)
{for (int i = 0; i < ps->size; i++){if (ps->arr[i] == x)return i;}return -1;//返回一个无效坐标
}
//在pos前插入
void SLInsert(SL* ps, int pos, SLdatatype x)
{assert(ps);assert(pos >= 0 && pos < ps->size);for (int i = ps->size; i > pos; i--){ps->arr[i] = ps->arr[i - 1];}ps->arr[pos] = x;ps->size++;
}
//删除pos位置的元素
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 SLModify(SL* ps, int pos, SLdatatype x)
{assert(ps);ps->arr[pos] = x;
}
//销毁
void SLDestory(SL* ps)
{if(ps->arr)free(ps->arr);ps->arr = NULL;ps->size = 0;ps->capacity = 0;
}

test.c:

#include"SeqList.h"void test1()
{SL s;SLInit(&s);SLPushBack(&s, 1);SLPushBack(&s, 2);SLPushBack(&s, 3);SLPushBack(&s, 4);SLPrint(&s);//1 2 3 4int pos=SLFind(&s,2);SLInsert(&s, pos, 7);SLPrint(&s);// 1 7 2 3 4SLErase(&s, pos);SLPrint(&s);//1 2 3 4SLModify(&s, pos, 6);SLPrint(&s);//1 6 3 4SLDestory(&s);//SLPushFront(&s, 5);//SLPrint(&s);// 5 1 2 3 4//SLPopBack(&s);//SLPopBack(&s);//SLPrint(&s);// 5 1 2//SLPopFront(&s);//SLPrint(&s);//1 2
}int main()
{test1();
}

往期回顾: 

【数据结构初阶】--算法复杂度的深度解析

【数据结构初阶】--顺序表(一)

【数据结构初阶】--顺序表(二)

结语:这篇博客中我们将顺序表的全部接口都实现完了,大家可以额外思考一下,怎么在pos后插入数据以及利用指定位置的插入,删除的复现来实现尾插,头插,尾删,头删。后面我会继续为大家分享其它数据结构的知识点,如果文章对你有帮助的话,欢迎评论,点赞,收藏加关注,感谢大家的支持。

http://www.dtcms.com/wzjs/450734.html

相关文章:

  • 网站建设可研百度刷排名百度快速排名
  • 做网站模板的海报尺寸多少钱长沙今日头条新闻
  • 域名怎么解析到服务器上seo平台代理
  • javascript网页设计教程seo顾问咨询
  • 彩票网站有人做吗seo查询友情链接
  • 哪个网站做售楼推广好潍坊网站建设seo
  • 网站不支持php小红书笔记关键词排名优化
  • 做直播网站有哪些百度seo怎么优化
  • 如何做旅游小视频网站it培训机构有哪些
  • 网站目前如何做外链下载谷歌浏览器并安装
  • java做网站开发的流程百度推广总部电话
  • 深圳效果图制作公司seo零基础入门教程
  • 网站建设与网页设计制作书籍短信广告投放
  • 劳务公司网站建设方案广州网站seo
  • 毕设做网站答辩会要求当场演示吗百度搜索关键词统计
  • 阿克苏网站建设seo是指什么
  • 怎样将自己做的网页加入网站百度搜索引擎api
  • 哔哩哔哩网页版怎么缓存视频威海seo公司
  • 网站运营每天做的百度搜索风云榜单
  • 常州哪家网站建设公司专业博客可以做seo吗
  • 有哪些能做专门接做标书的网站百度高级搜索技巧
  • 手机p2p网站开发网络营销的具体形式种类
  • 做微信投票的网站5电子商务seo是什么意思
  • 源码制作网站郑州网站建设哪里好
  • wordpress免费主题排行榜北京搜索引擎优化经理
  • redis做缓存的网站并发数昆明seo优化
  • 做h5的网站页面设计东莞seo黑帽培训
  • 网站怎么做优化步骤就业seo好还是sem
  • 找人做网站应该注意哪些湖南seo推广系统
  • 网站建设网站制作需要多少钱点击软件