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

便宜做网站8818找马云做网站

便宜做网站8818,找马云做网站,免费好用的云电脑,网站附件下载表格怎么做顺序表和链表 1.线性表1.1顺序表1.1.1静态顺序表#xff08;不去实现#xff09;1.1.2动态顺序表1.1.2.1 定义程序目标1.1.2.2 设计程序1.1.2.3编写代码1.1.2.3测试和调试代码 1.1.2 顺序表的问题与思考 1.2链表1.2.1链表的概念及结构1.2.1.1 定义程序目标1.2.1.2 设计程序1.… 顺序表和链表 1.线性表1.1顺序表1.1.1静态顺序表不去实现1.1.2动态顺序表1.1.2.1 定义程序目标1.1.2.2 设计程序1.1.2.3编写代码1.1.2.3测试和调试代码 1.1.2 顺序表的问题与思考 1.2链表1.2.1链表的概念及结构1.2.1.1 定义程序目标1.2.1.2 设计程序1.2.1.3编写代码1.1.2.3测试和调试代码 1.线性表 线性表linear list是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构常见的线性表顺序表、链表、栈、队列、字符串… 相同特性 逻辑结构人为想象出来的数据的组织形式 物理结构数据在想象出来的数据的组织形式。 1.1顺序表 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构一般情况下采用数组存储。在数组上完成数据的增删查改。 1.1.1静态顺序表不去实现 #define N 5 typedef int SLdatatype; typedef struct SeqList {SLdatatype array [N];int size; };1.1.2动态顺序表 typedef int SLdatatype; typedef struct SeqList {SLdatatype *arr;int capacity;//容量int size;//有效数据个数 }SL1.1.2.1 定义程序目标 #includestdio.h #includestdlib.h #includeassert.htypedef struct SeqList {SLDatatype *arr;int capacity;//容量int size;//有效数据个数 }SL;//初始化 void SLInitialize(SL*s);//销毁 void SLDestroy(SL*s );//打印顺序表 void SLPrint(SL* ps);//插入数据 //尾插 void SLPushBack(SL*s, SLDatatype x);//头插 void SLPushFront(SL*s, SLDatatype x);//尾删 void SLPopBack(SL* s);//头删 void SLPopFront(SL* s);//在指定位置插入数据 void SLInsert(SL* s, SLDatatype x, int pos);//在指定位置删除数据 void SLErase(SL* s,int pos);//查找数据 int SLFind(SL* s, SLDatatype x);1.1.2.2 设计程序 面向程序员自身的能实现包括顺序表的结构定义、初始化、插入、删除、查找、遍历、排序等操作 1.1.2.3编写代码 void SLInitialize(SL* ps) {ps-arr NULL;ps-capacity ps-size 0; }void SLDestroy(SL* ps) {if (ps-arr){free(ps-arr);}ps-arr NULL;ps-capacity ps-size 0; }void SLCheckCapacity(SL* ps) {//判断空间是否充足if (ps-size ps-capacity){//增容//若capacity为0给个默认值否则×2倍int NewCapacity ps-capacity 0 ? 4 : 2 * ps-capacity;SLDatatype* tmp (SLDatatype*)realloc(ps-arr, NewCapacity * sizeof(SLDatatype));if (tmp NULL){perror(realloc fail!);exit(1);}ps-arr tmp;ps-capacity NewCapacity;} }void SLPrint(SL* ps) {for (int i 0; i ps-size; i){printf(%d , ps-arr[i]);}printf(\n); }void SLPushBack(SL*ps, SLDatatype x) {assert(ps);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--; }void SLInsert(SL* ps, SLDatatype x, int pos) {assert(pos 0 pos ps-size);SLCheckCapacity(ps);for (int i ps-size; i pos; i--){ps-arr[i] ps-arr[i - 1];}ps-arr[ps-size] x;ps-size;}void SLErase(SL* ps, int pos) {assert(ps);assert(pos 0 pos ps-size ps-size);for (int ipos; i ps-size-1; i){ps-arr[i] ps-arr[i1];}ps-size--; }int SLFind(SL* ps, SLDatatype x) {assert(ps);for (int i 0; i ps-size; i){if (ps-arr[i] x)return i;}return -1; }1.1.2.3测试和调试代码 #includeSeqlist.h void SLtest01() {SL s;SLInitialize(s);SLPushBack(s, 1);SLPushBack(s, 2);SLPushBack(s, 3);SLPushBack(s, 4);SLPushBack(s, 5);SLPushBack(s, 6);/*SLPushBack(NULL , 6);*/SLPushFront(s, 1);SLPushFront(s, 2);SLPushFront(s, 3);SLPushFront(s, 4);SLPrint(s); //4 3 2 1SLPopBack(s);SLPrint(s);SLPopBack(s);SLPrint(s);SLPopBack(s);SLPrint(s);SLPopBack(s);SLPrint(s);SLPopFront(s);SLPrint(s);SLPopFront(s);SLPrint(s);SLPopFront(s);SLPrint(s);SLPopFront(s);SLPrint(s);SLPopFront(s);SLPrint(s);SLInsert(s, 11, 0);SLPrint(s);SLInsert(s, 22, s.size);SLPrint(s);SLInsert(s, 33, 1);SLPrint(s);SLDestroy(s); }int main() {SLtest01();return 0; }1.1.2 顺序表的问题与思考 中间/头部的插入删除时间复杂度为O(N)增容需要申请新空间拷贝数据释放旧空间。会有不小的消耗。增容一般是呈2倍的增长势必会有一定的空间浪费。例如当前容量为100满了以后增容到200我们 再继续插入了5个数据后面没有数据插入了那么就浪费了95个数据空间。 思考如何解决以上问题呢下面给出了链表的结构来看看。 1.2链表 1.2.1链表的概念及结构 概念链表是一种物理存储结构上非连续、非顺序的存储结构数据元素的逻辑顺序是通过链表中的指针链 接次序实现的 。 1.2.1.1 定义程序目标 实现 define _CRT_SECURE_NO_WARNINGS 1 #pragma once #includestdio.h #includestdlib.h #includeassert.htypedef int SLTDataType;//定义结点结构; typedef struct SListNode {SLTDataType data;struct SListNode* next; }SLTNode;//链表的打印 void SLTPrint(SLTNode*); //申请新结点 SLTNode* SLTBuyNode(SLTDataType); //尾插 void SLTPushBack(SLTNode**, SLTDataType); //头插 void SLTPushFront(SLTNode** , SLTDataType );//删除//尾删 void SLTPopBack(SLTNode**); //头删 void SLTPopFront(SLTNode**);//查找 SLTNode* SLTFind(SLTNode*, SLTDataType);//在指定位置之前插⼊数据 void SLTInsert(SLTNode** pphead, SLTNode* pos, SLTDataType x);//在指定位置之后插⼊数据 void SLTInsertAfter(SLTNode* pos, SLTDataType x);//删除pos结点 void SLTErase(SLTNode** pphead, SLTNode* pos);//删除pos之后的结点 void SLTEraseAfter(SLTNode* pos);//销毁链表 void SListDestroy(SLTNode** pphead);1.2.1.2 设计程序 面向程序员自身的能实现包括链表的结构定义、初始化、插入、删除、查找、遍历、排序等操作 1.2.1.3编写代码 #define _CRT_SECURE_NO_WARNINGS 1 #includeSList.h void SLTPrint(SLTNode* phead) {SLTNode* pcur phead;while (pcur){printf(%d-, pcur-data);pcur pcur-next;}printf(NULL\n); }SLTNode* SLTBuyNode(SLTDataType x) {SLTNode* node (SLTNode*)malloc(sizeof(SLTNode));if (node NULL){perror(malloc fail);exit(1);}node-data x;node-next NULL;return node; }void SLTPushBack(SLTNode**pphead, SLTDataType x) {//申请新结点SLTNode*NewNode SLTBuyNode(x);if (*pphead NULL){*pphead NewNode;}//尾结点-新结点//找尾结点else{SLTNode* pcur *pphead;while (pcur-next){pcur pcur-next;}pcur-next NewNode;} }void SLTPushFront(SLTNode** pphead, SLTDataType x) {assert(pphead);//申请新结点SLTNode* NewNode SLTBuyNode(x);//进行头插NewNode-next *pphead;*pphead NewNode; }void SLTPopBack(SLTNode** pphead) {//链表为空不可以删除assert(pphead *pphead);//处理链表只有一个结点的情况if ((*pphead)-next NULL){free(*pphead);*pphead NULL;}else{//找prev和ptailSLTNode* ptail *pphead;SLTNode* prev NULL;while (ptail-next){prev ptail;ptail ptail-next;}prev-next NULL;free(ptail);ptail NULL;} }void SLTPopFront(SLTNode** pphead) {//链表为空不可以删除assert(pphead *pphead);SLTNode* next (*pphead)-next;free(*pphead);*pphead NULL;*pphead next; }SLTNode* SLTFind(SLTNode* phead, SLTDataType x) {SLTNode* pcur phead;while (pcur){if (pcur-data x){return pcur;}else{pcur pcur-next;}}return NULL; }void SLTInsert(SLTNode** pphead, SLTNode* pos, SLTDataType x) {assert(pphead);assert(pos);if (*pphead pos)SLTPushBack(pphead, x);else{SLTNode* prev *pphead;SLTNode* NewNode SLTBuyNode(x);while (prev-next ! pos){prev prev-next;}prev-next NewNode;NewNode-next pos;} }void SLTInsertAfter(SLTNode* pos, SLTDataType x) {assert(pos);SLTNode* NewNode SLTBuyNode(x);NewNode-next pos-next;pos-next NewNode; }void SLTErase(SLTNode** pphead, SLTNode* pos) {assert(pphead*pphead);assert(pos);if (*pphead pos)SLTPopBack(pphead);else{SLTNode* prev *pphead;while (prev-next ! pos){prev prev-next;}prev-next pos-next;free(pos);pos NULL;} }void SLTEraseAfter(SLTNode* pos) {assert(pos pos-next);SLTNode* del pos-next;pos-next pos-next-next;free(del);del NULL; }void SListDestroy(SLTNode** pphead) {SLTNode* pcur *pphead;while (pcur){SLTNode* next pcur-next;free(pcur);pcur next;}*pphead NULL; }1.1.2.3测试和调试代码 #define _CRT_SECURE_NO_WARNINGS 1 #includeSList.hvoid SListTest01() {SLTNode* plist NULL;SLTPushBack(plist, 1);SLTPushBack(plist, 2);SLTPushBack(plist, 3);SLTPushBack(plist, 4);SLTPrint(plist);//1-2-3-4-NULLSLTPushFront(plist, 1);SLTPushFront(plist, 2);SLTPushFront(plist, 3);SLTPushFront(plist, 4);SLTPrint(plist); //4-3-2-1-NULLSLTPopBack(plist);SLTPrint(plist);SLTPopBack(plist);SLTPrint(plist);SLTPopBack(plist);SLTPrint(plist);SLTPopBack(plist);SLTPrint(plist);SLTPopBack(plist);SLTPrint(plist);SLTPopFront(plist);SLTPrint(plist);SLTPopFront(plist);SLTPrint(plist);SLTNode* find SLTFind(plist, 4);if (find NULL){printf(未找到\n);}else{printf(找到了\n);}SLTInsert(plist, plist, 11);//4-3-2-11-1-NULLSLTInsertAfter(plist, 11);SLTPrint(plist);1-11-2-3-4-NULLSLTErase(plist, plist);// 1-2-3-NULLSLTEraseAfter(plist);SLTPrint(plist);SListDestroy(plist);SLTPrint(plist); } int main() {SListTest01();return 0; }
http://www.hkea.cn/news/14259046/

相关文章:

  • 有专业做网站的吗gre考专教做蛋糕的网站
  • 泰安网站建设制作电话号码做一个中英文网站的价格
  • 深圳网站建设托管哪个公司的网络最好用
  • 自己建网站免费阿里云域名注册证书
  • 个人电子商务网站 制作合肥房产网官网首页
  • 房屋中介网站模板彩票网站是怎么做的
  • 河南整站百度快照优化做内网网站
  • 山东站群网站建设成都住房和城乡建设局 网站
  • 网站添加关键词如何自己做淘宝客推广网站
  • 杭州网站建设公司电话开发公司个人工作总结
  • 济南网站运营公司教育网站怎么做引导栏的
  • 网站收录上万没有流量中小学网站建设有什么好处
  • 网站icp备案证明文件idea做网站登录
  • 国家工业和信息化部网站备案系统网站违规关键词
  • 厦门市建设局网站住房保障大数据营销的特点
  • 建设工程考试官方网站莱芜信息港金点子招聘
  • ps做网站 大小甘肃省建设厅招标办网站
  • fireworks8做网站wordpress主题 淘宝客
  • 科技广告公司网站模板建设门户网站 业务模板
  • 哪个公司建设网站怎样建设凡科网站
  • 设计必知的设计网站 039苏州适合做网络推广的企业
  • 有做车身拉花的网站吗线上教学网站
  • iis 发布织梦网站wordpress文章发送代码块
  • 怎样自己弄一个网站做网站开发赚钱吗
  • 网站数据库备份还原羽毛球赛事奖金
  • 专门做外国的网站吗WordPress数据库自动切换
  • 龙岩网站制作多少钱网站被墙是谁做的
  • 网站导航的分类有哪些网站建设的工具
  • 拖式网站建设软件站
  • 烟台做网站价格安网需要多少钱