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

iview做的网站盐城市建设局网站打不开

iview做的网站,盐城市建设局网站打不开,创意网站推荐,邯郸资讯目录 带头结点的双向循环链表 1.存储定义 2.结点的创建 3.结点的初始化 4.尾插结点 5.尾删结点 6.头插结点 7.头删结点 8.查找并返回结点 9.在pos结点前插入结点 10.删除pos结点 11.打印链表 12.销毁链表 13.头插结点2.0版 14.尾插结点2.0版 前言#xff1a; 当…目录 带头结点的双向循环链表 1.存储定义 2.结点的创建 3.结点的初始化 4.尾插结点 5.尾删结点 6.头插结点 7.头删结点  8.查找并返回结点 9.在pos结点前插入结点 10.删除pos结点 11.打印链表 12.销毁链表 13.头插结点2.0版 14.尾插结点2.0版 前言 当我们使用单链表时想要去找到前面的前驱结点的时候我们发现了受到限制因为当时的结点只能去找后面的结点。 于是就到了这里的带头结点的双向循环链表。 如图 首先给出  双向链表的定义是在单链表的每个结点中再设置一个指向其前驱结点的指针域。 那双向循环链表就是最后一个结点的next指向头结点头结点的前驱指向尾结点。 带头结点的双向循环链表 1.存储定义 typedef int CLDataType;typedef struct ListNode {CLDataType val;struct ListNode* next; //存放后面结点的指针struct ListNode* pre; //存放前面结点的指针 }ListNode; 2.结点的创建 结点的创建刚开始创建头结点我们一般会采用二级指针的方式这里我们采用使用函数返回值的形式来避免野指针问题。 //创建链表 ListNode* CreateNode(CLDataType x) {//这里采用返回值的形式进行创建结点ListNode* newnode (ListNode*)malloc(sizeof(ListNode));if (newnode NULL) {perror(malloc);exit(-1);}newnode-val x;newnode-pre NULL;newnode-next NULL;return newnode; } 如果是刚开始创建的头节点的话 3.结点的初始化 这个时候就能体现带头结点双向循环链表的好处了 ListNode* InitNode() {ListNode* phead CreateNode(-1);//让头节点的前驱和后继结点都指向自己phead-next phead; phead-pre phead;return phead; } 因为修改了头结点所以接着使用函数返回值的形式。 注意初始化时头结点的前驱和后继指针都指向自己。如图 4.尾插结点 之前的单链表尾插需要遍历整个链表去找尾结点但是这里是带头结点的双向循环链表只需去找头结点的前驱结点就找到了尾结点。 //尾插结点 void ListPushBack(ListNode* phead, CLDataType x) {assert(phead);ListNode* newnode CreateNode(x);ListNode* tail phead-pre;tail-next newnode; //之前的尾结点的后继指针指向新结点newnode-pre tail; //新结点的前驱指向之前的尾结点newnode-next phead; //新结点的后继指针指向头结点phead-pre newnode; //头结点的前驱指向当链表中只有一个头结点的时候tail指向自己。 再继续尾插时仍是这样。 5.尾删结点 一般都是先找到尾节结点然后再去找到尾结点的前一个结点Pre。Pre指向头结点头结点的前驱指向Pre。之后再删去尾节结。 //尾删结点 void ListPopBack(ListNode* phead) {assert(phead);assert(phead-next ! phead); //避免只有一个头结点ListNode* tail phead-pre;ListNode* Pre tail-pre; //用来记录尾结点的前一个结点Pre-next phead;phead-pre Pre;free(tail);tail NULL; } 注意当只有一个头结点的情况时说明已经没有链表结点。所以不能进行删除。进而这里采用assert( phead-next ! phead) 来避免此情况。 6.头插结点 和单链表的头插相似用next指针记录头结点的下一个结点。先让新结点与next指针指向的结点建立连接再与头结点建立连接。 //头插结点 void ListPushFront(ListNode* phead,CLDataType x) {assert(phead);ListNode* newnode CreateNode(x);ListNode* next phead-next; //记录头结点后的第一个结点newnode-next next;next-pre newnode;phead-next newnode;newnode-pre phead; } 7.头删结点  这里需要注意的是避免只有一个头结点的情况下删除结点这样使用同尾删结点一样的方法通过断言 assert(phead-next ! phead); //头删结点 void ListPopFront(ListNode* phead) {assert(phead);assert(phead-next ! phead);phead-next phead-next-next;phead-next-next-pre phead; } 8.查找并返回结点 这里采用cur指针去遍历链表找到就返回结点没有找到就返回空。 //查找并返回结点 ListNode* ListFind(ListNode* phead, CLDataType x) {assert(phead);ListNode* cur phead-next;while (cur ! phead) {if (cur-val x){return cur;}cur cur-next;}return NULL; } 9.在pos结点前插入结点 因为是带头结点的双向循环链表这样就可以直接进行插入。 //在pos前面插入结点 void ListInsert(ListNode* pos, CLDataType x) {assert(pos);ListNode* newnode CreateNode(x);//注意顺序//先让后驱建立连接newnode-next pos;pos-pre-next newnode;//再前驱建立连接newnode-pre pos-pre;pos-pre newnode; } 10.删除pos结点 修改pos的前驱和后继 //删除pos位置的结点 void ListErase(ListNode* pos) {assert(pos);pos-pre-next pos-next;pos-next-pre pos-pre; } 11.打印链表 //打印链表 void ListPrint(ListNode* phead) {assert(phead);ListNode* cur phead-next;printf(phead);while (cur ! phead) {printf(%d, cur-val);cur cur-next;}printf(\n); } 12.销毁链表 //销毁链表 void ListDestory(ListNode* phead) {assert(phead);ListNode* cur phead-next;while (cur ! phead){ListNode* next cur-next;free(cur);cur next;}free(phead);phead NULL; } 13.头插结点2.0版 这里我们借助 在pos结点前插入结点 的接口。 头插结点那就是把pos结点变为 phead-next 的结点。这样结点的插入就模拟了头插结点从而减少了一写代码的工作量。 //头插结点2.0 void ListushFront(ListNode* phead, CLDataType x) {assert(phead);ListNode* newnode CreateNode(x);ListNode* next phead-next; //记录头结点后的第一个结点ListInsert(next,x); //这里的next相当于pos结点 } 例如  在 1结点 前插入 结点25 14.尾插结点2.0版 根据带头结点的双向循环链表的特性再借助前面的 在pos结点前插入结点ListInsert 的接口 这时我们会想到的就是 尾插结点不是在尾结点的后面进行插入的吗而ListInsert是在pos前面进行结点的插入。 这时就采用  在头结点的前进行插入结点从而达到尾插结点的特性。 //尾插结点 void ListPushBack(ListNode* phead, CLDataType x) {assert(phead);ListNode* newnode CreateNode(x);ListInsert(phead,x); }
http://www.hkea.cn/news/14574574/

相关文章:

  • 网站建设seo 视频国内好用的搜索引擎
  • 做三角渐变用哪个网站商标注册网址官方
  • 院校网站建设对比分析实训报总结怎么设立网站
  • 数字校园建设专题网站网站开发费用报价
  • 贵州建设厅网站wordpress主题存放目录
  • 哪里的佛山网站建设舟山网站网站建设
  • 省建设执业资格注册中心网站设计风格网站欣赏
  • 做黑网站赚钱吗贵阳网站建设宏思锐达
  • 酒水销售网站模板制作图片软件免费版
  • 网站开发资金规模360建筑网密码忘了
  • 什么是网站开发公司网站备案名称更换
  • 会议专题网站建设报价单百度电脑版下载
  • 网站数据库网络错误怎么解决方案php网站建设的公司
  • 婚庆网站名字网站建设 报价单 doc
  • 免费网站平台推荐网站全网推广好还是做58精准好
  • 套路网站怎么做的jsp网站开发技术的开发
  • 网站四对联广告代码网站建设及相关流程图
  • 做网店有哪些拿货网站怎样开通微信公众号平台
  • 公司网站建设安全的风险牡丹江网路运营中心
  • 都市网安徽360优化
  • 灯塔建设网站wordpress没权重
  • 济宁做网站的企业wordpress for ace
  • 做网站公司实力排名西安十大网络公司排名
  • wordpress导入主题数据seo网站优化服务合同
  • 上海建智建设人才培训中心网站网站为什么不收录
  • 建设网站技术人员先进事迹辽宁建设工程信息网盲盒
  • 泉州哪个公司网站做的好网站搭建素材群
  • 搜网站网wordpress高端教程
  • 没有营业执照可以建设网站网站建建设
  • 广州网站设计建设公司wordpress删除plugins