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

网站设计公司网站专业昆凌做的广告买化妆品网站

网站设计公司网站专业,昆凌做的广告买化妆品网站,做的网站在ie会乱码,ip38域名信息查询网站个人主页 水月梦镜花 个人专栏 C语言 #xff0c;数据结构 文章目录 一、顺序表二、实现思路1.存储结构2.初始化顺序表(SeqListInit)3.销毁顺序表(SeqListDestroty)4.打印顺序表(SeqListPrint)5.顺序表尾插(SeqListPushBack)and检查容量(SeqListCheckCapacity)6.顺序表头插(Se… 个人主页 水月梦镜花 个人专栏 C语言 数据结构 文章目录 一、顺序表二、实现思路1.存储结构2.初始化顺序表(SeqListInit)3.销毁顺序表(SeqListDestroty)4.打印顺序表(SeqListPrint)5.顺序表尾插(SeqListPushBack)and检查容量(SeqListCheckCapacity)6.顺序表头插(SeqLsitPushFront)7.顺序表尾删(SeqListPopBack)8.顺序表头删(SeqListPopFront)9.顺序表查找(SeqListFind)10.在pos位置前插入元素(SeqListInsert)11.删除pos位置的值(SeqListErase) 三、代码实现总结 一、顺序表 顺序表是用一段物理结构连续的存储单元依次存储数据元素的线性结构一般采用数组存储。 顺序表一般分为两种 静态顺序表使用定长数组实现动态顺数表使用动态开辟的数组实现 本篇文章顺序表是使用动态开辟的数组实现(动态顺序表)。要实现的功能如下 //初始化顺序表 void SeqListInit(SeqList* ps);//销毁顺序表 void SeqListDestroty(SeqList* ps);//打印顺序表 void SeqListPrint(SeqList* ps);//顺序表尾插 void SeqListPushBack(SeqList* ps, SLDateType x);//顺序表头插 void SeqLsitPushFront(SeqList* ps, SLDateType x);//顺序表尾删 void SeqListPopBack(SeqList* ps);//顺序表头删 void SeqListPopFront(SeqList* ps);//顺序表查找 int SeqListFind(SeqList* ps, SLDateType x);//在pos位置前插入元素 void SeqListInsert(SeqList* ps, int pos, SLDateType x);//删除pos位置的值 void SeqListErase(SeqList* ps, int pos);//检查容量 void SeqListCheckCapacity(SeqList* ps);二、实现思路 画图理解起来更佳 1.存储结构 我们重命名int类型为SLDataType方便以后我们修改顺序表存储元素的类型。 指针data指向动态开辟的空间变量sz记录有效的数据元素变量capacity记录动态开辟空间的大小。 typedef int SLDataType;typedef struct SeqList {SLDataType* data;int sz;int capacity; }SeqList;2.初始化顺序表(SeqListInit) 动态开辟一块空间用data指针保存空间首地址。 此时data指向空间中有效元素为0使sz 0变量capacity在等于此时开辟空间的大小。 #define SIZE 4void SeqListInit(SeqList* ps) {ps-data (SLDataType*)malloc(sizeof(SLDataType) * SIZE);if (ps-data NULL){perror(malloc);exit(-1);}ps-sz 0;ps-capacity SIZE; }3.销毁顺序表(SeqListDestroty) free所开辟的空间使data NULL此时数据有效元素为0空间大小为0那么sz 0capacity 0 //销毁顺序表 void SeqListDestroty(SeqList* ps) {assert(ps);//free(ps);free(ps-data);ps-data NULL;ps-sz 0;ps-capacity 0; }4.打印顺序表(SeqListPrint) 这个函数非常简单只要遍历一遍所开辟的空间即可注意范围是(0sz)。 //打印顺序表 void SeqListPrint(SeqList* ps) {assert(ps);for (int i 0; i ps-sz; i){printf(%d , ps-data[i]);}printf(\n);}5.顺序表尾插(SeqListPushBack)and检查容量(SeqListCheckCapacity) 每次加入数据时我们要先检查空间大小是否充足再加入数据 检查容量 在尾插数据前要检查空间大小是否充足(sz capacity)如果空间大小不够要扩大空间大小capacity记录新的空间大小。 尾插元素 变量sz不仅代表空间有效元素个数也代表了新数据元素将要放入的位置。所以尾插元素只要空间大小充足那么在data[sz]处放入数据即可不要忘记sz要加一。 //检查容量 void SeqListCheckCapacity(SeqList* ps) {SLDataType* tmp (SLDataType*)realloc(ps-data, sizeof(SLDataType) * ps-capacity * 2);if (tmp NULL){perror(realloc);exit(-1);}ps-data tmp;ps-capacity * 2; }//顺序表尾插 void SeqListPushBack(SeqList* ps, SLDataType x) {assert(ps);if (ps-sz ps-capacity){SeqListCheckCapacity(ps);}ps-data[ps-sz] x;ps-sz; }6.顺序表头插(SeqLsitPushFront) 顺序表除了尾插尾删不用挪到数据其它的增删都要挪到数据。 头插数据要先检查空间大小再向后挪到数据将数据放入data[0]处sz在加一。 //顺序表头插 void SeqLsitPushFront(SeqList* ps, SLDataType x) {assert(ps);if (ps-sz ps-capacity){SeqListCheckCapacity(ps);}int end ps-sz;while (end 0){ps-data[end] ps-data[end - 1];end--;}ps-data[0] x;ps-sz; }7.顺序表尾删(SeqListPopBack) 变量sz代表有效数据的个数那么只要sz减一就代表最后一个数据被删除了。 //顺序表尾删 void SeqListPopBack(SeqList* ps) {assert(ps);assert(ps-sz ! 0);ps-sz--; }8.顺序表头删(SeqListPopFront) 头删数据要将数据从后向前挪到覆盖掉第一个数据sz要减一。 //顺序表头删 void SeqListPopFront(SeqList* ps) {assert(ps);assert(ps-sz ! 0);for (int i 0; i ps-sz - 1; i){ps-data[i] ps-data[i 1];}ps-sz--; }9.顺序表查找(SeqListFind) 遍历一遍动态开辟的数组如果找到了就放回下标没有就放回-1。 //顺序表查找 int SeqListFind(SeqList* ps, SLDataType x) {assert(ps);for (int i 0; i ps-sz; i){if (ps-data[i] x){return i;}}return -1; }10.在pos位置前插入元素(SeqListInsert) 要先检查空间容量是否充足和要插入的位置是否合法(要在顺序表的有效数据内)再将pos下标后的数据向后挪到将数据放入data[pos]处sz加一。 这个函数思路简单但要注意下面两点 如果pos 0不就是要在顺序表第一个元素前插入元素不就是顺序表的头插。如果pos sz我们知道sz还表示下一个数据要放入的位置那么我在下一个数据要放入的位置前插入元素不就是顺序表的尾插。 理解这点后我们以后的头插尾插都可以用该函数复用。方便我们手撕顺序表 //在pos位置前插入元素 void SeqListInsert(SeqList* ps, int pos, SLDataType x) {assert(ps);assert(pos 0 pos ps-sz);if (ps-sz ps-capacity){SeqListCheckCapacity(ps);}int end ps-sz;while (end pos){ps-data[end] ps-data[end - 1];end--;}ps-data[pos] x;ps-sz; } 11.删除pos位置的值(SeqListErase) 删除pos位置处的数据先检查pos的合法性(要属于[0sz-1])要将数据从后向前挪到数据sz减一。 这个函数思路简单但要注意下面两点 如果pos 0不就是要删除第一个数据不就是头删。如果pos sz - 1不就是要删除最后一个数据不就是尾删。 所以对于尾删头删函数而言我们也可以使用该函数复用。 //删除pos位置的值 void SeqListErase(SeqList* ps, int pos) {assert(ps);assert(pos 0 pos ps-sz);for (int i pos; i ps-sz - 1; i){ps-data[i] ps-data[i 1];}ps-sz--; }三、代码实现 头删头插尾删尾插我都复用了SeqListInsert和SeqListErase。 SeqList.h 文件存放有关函数的声明以及结构体的声明 SeqList.c 文件存放函数的定义 //SeqList.h 文件#pragma once#include stdio.h #include stdlib.h #include assert.h#define SIZE 4typedef int SLDataType;typedef struct SeqList {SLDataType* data;int sz;int capacity; }SeqList;//初始化顺序表 void SeqListInit(SeqList* ps);//销毁顺序表 void SeqListDestroty(SeqList* ps);//打印顺序表 void SeqListPrint(SeqList* ps);//顺序表尾插 void SeqListPushBack(SeqList* ps, SLDateType x);//顺序表头插 void SeqLsitPushFront(SeqList* ps, SLDateType x);//顺序表尾删 void SeqListPopBack(SeqList* ps);//顺序表头删 void SeqListPopFront(SeqList* ps);//顺序表查找 int SeqListFind(SeqList* ps, SLDateType x);//在pos位置前插入元素 void SeqListInsert(SeqList* ps, int pos, SLDateType x);//删除pos位置的值 void SeqListErase(SeqList* ps, int pos);//检查容量 void SeqListCheckCapacity(SeqList* ps);//SeqList.c 文件#include SeqList.h//初始化顺序表 void SeqListInit(SeqList* ps) {ps-data (SLDataType*)malloc(sizeof(SLDataType) * SIZE);if (ps-data NULL){perror(malloc);exit(-1);}ps-sz 0;ps-capacity SIZE; }//检查容量 void SeqListCheckCapacity(SeqList* ps) {SLDataType* tmp (SLDataType*)realloc(ps-data, sizeof(SLDataType) * ps-capacity * 2);if (tmp NULL){perror(realloc);exit(-1);}ps-data tmp;ps-capacity * 2; }//顺序表尾插 void SeqListPushBack(SeqList* ps, SLDataType x) {/*assert(ps);if (ps-sz ps-capacity){SeqListCheckCapacity(ps);}ps-data[ps-sz] x;ps-sz;*/SeqListInsert(ps, ps-sz, x); }//打印顺序表 void SeqListPrint(SeqList* ps) {assert(ps);for (int i 0; i ps-sz; i){printf(%d , ps-data[i]);}printf(\n);}//销毁顺序表 void SeqListDestroty(SeqList* ps) {assert(ps);//free(ps);free(ps-data);ps-data NULL;ps-sz 0;ps-capacity 0; }//顺序表头插 void SeqLsitPushFront(SeqList* ps, SLDataType x) {/*assert(ps);if (ps-sz ps-capacity){SeqListCheckCapacity(ps);}int end ps-sz;while (end 0){ps-data[end] ps-data[end - 1];end--;}ps-data[0] x;ps-sz;*/SeqListInsert(ps, 0, x); }//顺序表尾删 void SeqListPopBack(SeqList* ps) {/*assert(ps);assert(ps-sz ! 0);ps-sz--;*/SeqListErase(ps, ps-sz - 1); }//顺序表头删 void SeqListPopFront(SeqList* ps) {/*assert(ps);assert(ps-sz ! 0);for (int i 0; i ps-sz - 1; i){ps-data[i] ps-data[i 1];}ps-sz--;*/SeqListErase(ps, 0); }//顺序表查找 int SeqListFind(SeqList* ps, SLDataType x) {assert(ps);for (int i 0; i ps-sz; i){if (ps-data[i] x){return i;}}return -1; }//在pos位置前插入元素 void SeqListInsert(SeqList* ps, int pos, SLDataType x) {assert(ps);assert(pos 0 pos ps-sz);if (ps-sz ps-capacity){SeqListCheckCapacity(ps);}int end ps-sz;while (end pos){ps-data[end] ps-data[end - 1];end--;}ps-data[pos] x;ps-sz; }//删除pos位置的值 void SeqListErase(SeqList* ps, int pos) {assert(ps);assert(pos 0 pos ps-sz);for (int i pos; i ps-sz - 1; i){ps-data[i] ps-data[i 1];}ps-sz--; }总结 以上就是顺序表的实现。谢谢支持
http://www.w-s-a.com/news/563385/

相关文章:

  • 成都网站建设:河北省建设工程质量监督网站
  • 四川省建设厅官网信息查询平台北京seo关键词优化外包
  • 网站建设响应式是什么意思wordpress弹窗打开网页
  • 做美工需要参考的网站漳州做网站的公司
  • 用源码建设网站关于网站开发的自我评价
  • 网站设计师图片自助建站编辑器
  • 网站建设的常用技术有哪些深圳建筑工地招工
  • 做软装找图片的网站wordpress 替代
  • 制作网站的后台公众号做视频网站会封吗
  • 广西企业建站邯郸景区网站制作
  • 开发商城网站多少钱城厢区建设局网站
  • 网站外链多的危害天水市建设局网站
  • 网站接入商学交互设计网站
  • 目前最新的网站后台架构技术综述什么网站可以做名片
  • 成都建站长沙做网站美工的公司
  • 湖南省住房与城乡建设厅网站平顶山网站关键词优化
  • 购物网站前台功能模块汕头网站设计电话
  • 网站你懂我意思正能量免费wordpress菜单底部导航代码
  • 一个主机可以建设多少个网站山东高端网站建设
  • 长沙网站建设搭建网络营销做得好的公司
  • 如何做网站的后台管理石家庄seo关键词排名
  • 给自己公司做个网站山东做外贸网站的公司
  • 张家港网站建设培训江苏省建设工程网站系统
  • html个人网站桂林建站
  • 湛江网站优化快速排名wordpress文章页面宽度
  • 自己建网站怎么弄唯品会一家专门做特卖的网站
  • 做文化传播公司网站做搜狗pc网站点
  • 免费的黄冈网站有哪些平台可以聊天呢要查询一个网站在什么公司做的推广怎么查
  • 凡客建站登录入口网站建设先进部门评选标准
  • 响应式设计 手机网站政务中心建设网站