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

做解析会员电影的网站湘潭网站建设 问下磐石网络

做解析会员电影的网站,湘潭网站建设 问下磐石网络,微信小程序商城收费吗,最新源码论坛目录 1.线性表概念 1.1 什么是顺序列表 1.2 线性表 2.顺序表实现 将有以下功能#xff1a; 详细过程 顺序表的动态存储 顺序表初始化 尾插 扩容 头插 更改后的尾插 尾删 头删 打印 释放内存 优化顺序表 (任意位置插入删除) 优化后的头插尾插 优化后的头删尾…目录 1.线性表概念 1.1 什么是顺序列表 1.2 线性表 2.顺序表实现 将有以下功能 详细过程 顺序表的动态存储 顺序表初始化 尾插 扩容 头插 更改后的尾插 尾删 头删 打印 释放内存 优化顺序表 (任意位置插入删除) 优化后的头插尾插 优化后的头删尾删 查找和删除 进行装饰(菜单) 成品 SeqList.h SeqList.c Test.c: 1.线性表概念 1.1 什么是顺序列表 顺序列表Sequential List是一种使用连续的内存空间存储元素的线性数据结构。顺序列表中的元素按照其在内存中的物理顺序依次排列同时通过索引来访问元素。 顺序列表可以使用数组来实现数组的下标就是元素的索引。由于数组具有随机访问的特性即可以通过索引直接访问元素因此顺序列表在查找指定位置的元素时具有较高的效率。 顺序列表的特点包括 连续的内存空间顺序列表中的元素在内存中是连续存储的这样可以通过索引进行快速访问提高了访问效率。 固定大小顺序列表的大小在创建时就确定一旦分配了固定大小的内存空间就无法自动扩展或缩小。需要预估元素的个数以避免空间浪费或溢出。 随机访问效率高由于顺序列表基于数组实现并支持随机访问可以在O(1)的时间复杂度内获取指定位置的元素值。 插入和删除的效率较低当需要在顺序列表的中间位置插入或删除元素时需要移动部分元素导致时间复杂度为O(n)。因此在有频繁的插入和删除操作时顺序列表的效率可能较低。 需要注意的是顺序列表适用于元素个数固定且随机访问较为频繁的场景。当需要频繁进行插入和删除操作或者元素个数不确定时可以考虑其他数据结构如链表。 1.2 线性表 线性表linear list是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使 用的数据结构常见的线性表顺序表、链表、栈、队列、字符串… 线性表在逻辑上是线性结构也就说是连续的一条直线。但是在物理结构上并不一定是连续的 线性表在物理上存储时通常以数组和链式结构的形式存储。 2.顺序表实现 将有以下功能 // 顺序表的动态存储 typedef struct SeqList// 基本增删查改接口 // 顺序表初始化 void SeqListInit(SeqList* psl); // 顺序表销毁 void SeqListDestory(SeqList* psl); // 顺序表打印 void SeqListPrint(SeqList* psl); // 检查空间如果满了进行增容 void CheckCapacity(SeqList* psl); // 顺序表尾插 void SeqListPushBack(SeqList* psl, SLDataType x); // 顺序表尾删 void SeqListPopBack(SeqList* psl); // 顺序表头插 void SeqListPushFront(SeqList* psl, SLDataType x); // 顺序表头删 void SeqListPopFront(SeqList* psl); // 顺序表查找 int SeqListFind(SeqList* psl, SLDataType x); // 顺序表在pos位置插入x void SeqListInsert(SeqList* psl, size_t pos, SLDataType x); // 顺序表删除pos位置的值 void SeqListErase(SeqList* psl, size_t pos);详细过程 定义三个文件 头文件 SeqList.h 函数的实现SeqList.c 代码的测试 Test.c 顺序表的动态存储 //SeLqist.h #define N 200 typedef int SLDataType;//静态顺序表 -- N太小可能不够用 N太大可能浪费空间 //struct SeqList //{ // SLDataType a[N]; // int size; // int capa; //};//动态顺序表 typedef struct SeqList {SLDataType* a;// 指向数组的指针int size; // 数据个数int capacity;// 容量-空间大小 }SL;顺序表初始化 //SeqList.c void SLInit(SL* ps) {ps-a NULL;ps-size ps-capacity 0; }尾插 void SLPushBack(SL* ps, SLDataType x) {//检查容量空间满了扩容if (ps-capacity ps-size){int newCapacity 0;if (ps-capacity 0)newCapacity ps-capacity 4;elsenewCapacity ps-capacity * 2;SLDataType* tmp (SLDataType*)realloc(ps-a, newCapacity * sizeof(SLDataType));if (tmp NULL){printf(realloc fail\n);//exit(-1);}ps-a tmp;ps-capacity newCapacity;}ps-a[ps-size] x;ps-size; }扩容 //动态增容 void SLCheckCapacity(SL* ps) {//检查容量空间满了扩容if (ps-capacity ps-size){int newCapacity 0;if (ps-capacity 0)newCapacity ps-capacity 4;elsenewCapacity ps-capacity * 2;SLDataType* tmp (SLDataType*)realloc(ps-a, newCapacity * sizeof(SLDataType));if (tmp NULL){printf(realloc fail\n);//exit(-1);}ps-a tmp;ps-capacity newCapacity;} }头插 因为多处要进行数据扩容故将数据扩容单独用写为一个函数 void SLPushBack(SL* ps, SLDataType x) {SLCheckCapacity(ps);ps-a[ps-size] x;ps-size; }更改后的尾插 //尾插 void SLPushBack(SL* ps, SLDataType x) {SLCheckCapacity(ps);ps-a[ps-size] x;ps-size; }尾删 void SLPopBack(SL* ps) {//尾部要删除的数字无需重新定义数字意义不大//只需将 size-- 即可(要防止越界)assert(ps-size0);//防止空了还继续删除ps-size--; }头删 //头删 void SLPopFront(SL* ps) {assert(ps-size 0);int begin 1;while (beginps-size){ps-a[begin - 1] ps-a[begin];begin;}ps-size--; }打印 //打印 void SLPrint(SL* ps) {assert(ps!NULL);for (int i 0;i ps-size;i){printf(%d , ps-a[i]);}printf(\n); }释放内存 //释放内存 void SLDestory(SL* ps) {assert(ps ! NULL);if (ps-a){free(ps-a);ps-a NULL;ps-capacity ps-size 0;} }优化顺序表 (任意位置插入删除) 增加顺序表功能在中间部分 插入/删除 数字也可简化头尾插删代的码量 //任意位置插入 插入数据都要防止越界 void SLInsert(SL* ps, int pos, SLDataType x) {assert(ps);assert(pos 0 pos ps-size);SLCheckCapacity(ps);int end ps-size - 1;while (endpos){ps-a[end 1] ps-a[end];--end;}ps-a[pos] x;ps-size; }//任意位置删除 void SLErase(SL* ps, int pos) {assert(pos 0 pos ps-size);int begin pos;while (beginps-size){ps-a[begin] ps-a[begin 1];begin;}ps-size--; }既然已经做到在任意位置可以插入代码则可以对之前写的代码进行简化 优化后的头插尾插 //尾插 void SLPushBack(SL* ps, SLDataType x) {SLInsert(ps, ps-size, x); }//头插 void SLPushFront(SL* ps, SLDataType x) {SLInsert(ps, 0, x); }优化后的头删尾删 //尾删 void SLPopBack(SL* ps) {SLErase(ps, ps-size - 1); }//头删 void SLPopFront(SL* ps) {SLErase(ps, 0); }查找和删除 //查找 int SLFind(SL* ps, SLDataType x) {for (int i 0; i ps-size; i){if (ps-a[i] x)return i;}return -1;//没找到 }//修改 int SLModify(SL* ps, int pos, SLDataType x) {assert(ps);assert(pos 0 pos ps-size);ps-a[pos] x; }测试该两项功能test.c: // int x 0; printf(请输入你要删除的值:); scanf(%d, x); int pos SLFind(sl, x); if (pos ! -1) {SLErase(sl, pos); } elseprintf(没有找到%d\n,x); SLPrint(sl); // int y, z; printf(请输入你要修改的值和修改后的值:); scanf(%d %d, y,z); pos SLFind(sl, y); if (pos ! -1) {SLModify(sl, pos,z); } elseprintf(没有找到%d\n, y); SLPrint(sl); // int f 0; printf(请输入你要删除的值,并删除所有与之相同的值:); scanf(%d, f); pos SLFind(sl, f); while (pos!-1) {SLErase(sl, pos);pos SLFind(sl, f); }进行装饰(菜单) void menu() {printf(*******************************\n);printf(1.头插 2.尾插 3.查找 \n);printf(4.删除 5.连续删除 6.修改 \n);printf(7.打印 8.退出 \n);printf(*******************************\n); }成品 SeqList.h #pragma once#include stdio.h #include assert.h #include stdlib.htypedef int SLDataType;//静态顺序表 -- N太小可能不够用 N太大可能浪费空间 //struct SeqList //{ // SLDataType a[N]; // int size; // int capa; //};//动态顺序表 typedef struct SeqList {SLDataType* a;// 指向数组的指针int size; // 数据个数int capacity;// 容量-空间大小 }SL;//初始化 void SLInit(SL* ps);//头插 void SLPushFront(SL* ps, SLDataType x);//头删 void SLPopFront(SL* ps);//尾插 void SLPushBack(SL* ps, SLDataType x);//尾删 void SLPopBack(SL* ps);//任意位置插入 void SLInsert(SL* ps,int pos, SLDataType x);//任意位置删除 void SLErase(SL* ps, int pos);//打印 void SLPrint(SL* ps);//动态增容 void SLCheckCapacity(SL* ps);//释放内存 void SLDestory(SL* ps);//查找 int SLFind(SL* ps, SLDataType x);//修改 void SLModify(SL* ps, int pos, SLDataType x);SeqList.c #include SeqList.hvoid SLInit(SL* ps) {ps-a NULL;ps-size ps-capacity 0; }//打印 void SLPrint(SL* ps) {assert(ps!NULL);for (int i 0;i ps-size;i){printf(%d , ps-a[i]);}printf(\n); }//动态增容 void SLCheckCapacity(SL* ps) {assert(ps ! NULL);//检查容量空间满了扩容if (ps-capacity ps-size){int newCapacity 0;if (ps-capacity 0)newCapacity ps-capacity 4;elsenewCapacity ps-capacity * 2;SLDataType* tmp (SLDataType*)realloc(ps-a, newCapacity * sizeof(SLDataType));if (tmp NULL){printf(realloc fail\n);//exit(-1);}ps-a tmp;ps-capacity newCapacity;} }//任意位置插入 插入数据都要防止越界 void SLInsert(SL* ps, int pos, SLDataType x) {assert(ps);assert(pos 0 pos ps-size);SLCheckCapacity(ps);//挪动数据int end ps-size - 1;while (endpos){ps-a[end 1] ps-a[end];--end;}ps-a[pos] x;ps-size; }//任意位置删除 void SLErase(SL* ps, int pos) {assert(pos 0 pos ps-size);int begin pos;while (beginps-size){ps-a[begin] ps-a[begin 1];begin;}ps-size--; }//尾插 void SLPushBack(SL* ps, SLDataType x) {SLInsert(ps, ps-size, x); }//头插 void SLPushFront(SL* ps, SLDataType x) {SLInsert(ps, 0, x); }//尾删 void SLPopBack(SL* ps) {SLErase(ps, ps-size - 1); }//头删 void SLPopFront(SL* ps) {SLErase(ps, 0); }//查找 int SLFind(SL* ps, SLDataType x) {for (int i 0; i ps-size; i){if (ps-a[i] x)return i;}return -1;//没找到 }//修改 void SLModify(SL* ps, int pos, SLDataType x) {assert(ps);assert(pos 0 pos ps-size);ps-a[pos] x; }//释放内存 void SLDestory(SL* ps) {assert(ps ! NULL);if (ps-a){free(ps-a);ps-a NULL;ps-capacity ps-size 0;} }Test.c: #include SeqList.h void menu() {printf(*******************************\n);printf(1.头插 2.尾插 3.查找 \n);printf(4.删除 5.连续删除 6.修改 \n);printf(7.打印 8.退出 \n);printf(*******************************\n); }int main() {//初始化SL sl;SLInit(sl);int option -1;int x,y,z,f;do{menu();scanf(%d, option);int val, pos;switch (option){case 1:printf(请输入要头插的数据,以0结束:);scanf(%d, val);while (val!0){SLPushFront(sl, val);scanf(%d,val);}break;case 2:printf(请输入要尾插的数据,以0结束:);scanf(%d, val);while (val ! 0){SLPushBack(sl, val);scanf(%d, val);}break;case 3:printf(请输入要查找的数字:);scanf(%d, y);pos SLFind(sl, y);if (pos ! -1){printf(找到了%d\n, y);}elseprintf(没有找到%d\n, y);SLPrint(sl);break;case 4:printf(请输入你要删除的值:);scanf(%d, x);int pos SLFind(sl, x);if (pos ! -1){SLErase(sl, pos);}elseprintf(没有找到%d\n, x);SLPrint(sl);break;case 5:printf(请输入你要删除的值,并删除所有与之相同的值:);scanf(%d, f);pos SLFind(sl, f);if (pos ! -1){while (pos ! -1){SLErase(sl, pos);pos SLFind(sl, f);}}elseprintf(没有找到要删除的值%d\n, f);break;case 6:printf(请输入你要修改的值和修改后的值:);scanf(%d %d, y, z);pos SLFind(sl, y);if (pos ! -1){SLModify(sl, pos, z);}elseprintf(没有找到%d\n, y);SLPrint(sl);break;case 7:SLPrint(sl);break;case 8:break;default:printf(输入错误请重新输入\n);break;}} while (option!8);printf(退出成功\n);//释放内存SLDestory(sl);return 0; }到这里就结束啦创作不易求求点个赞啦╰(°▽°)╯
http://www.pierceye.com/news/252956/

相关文章:

  • 嘉定区网站建设网站建设怎么谈
  • 网站开发 毕业设计如何做网站app
  • 优惠券网站开发谷歌seo搜索引擎下载
  • 安徽省建设工程资料上传网站重庆相亲网
  • 河南建设网站官网中英文公司网站
  • 手机版网站如何建设会议响应式网站开发
  • 肇庆住房建设部网站国外专门做旅游攻略的网站
  • 网站如何设置长尾词静态网站开发一体化课程
  • 学校网站建设流程做网站用哪个工具
  • 网站开发工作室策划案域名的价格
  • 郑州艾特网站建设公司互联网保险图片
  • 网站后台任务网站设计建设一般多少钱
  • 电子商务网站设计的基本流程创业商机网农村
  • 公司网站建设的费用如何入账毕节网站开发公司电话
  • 新浪推网站蜘蛛网站长工作职责
  • 百度网站排名关键词整站优化将wordpress部署
  • 做的ASP网站手机微站和网站数据同步
  • 爱站网长尾关键词挖掘工具营销类型网站怎么建设
  • 泉州seo网站推广在线查企业
  • 东营房地产网站建设wordpress文章关键字替换
  • 网站制作哪里好薇网站建设中最重要的环节是
  • 中山做营销型网站石家庄招投标公共服务平台官网
  • 修改wordpress的站点地址WordPress全屏图
  • 购物网站建设源码wordpress如何更改页脚背景颜色
  • 大型网站开发技术注册网站代码
  • 网站建设管理报告网站建设专家北京注安
  • 免费网站生成软件网站备案中的网站名称
  • 桐庐做网站手机里编辑 Wordpress
  • 外网怎么进入萧山网站优化
  • 做资源下载网站好吗婚恋网站建设公司排名