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

提供家居企业网站建设广州注册公司代理

提供家居企业网站建设,广州注册公司代理,怎么样的网站合适做城市代理,广州技术支持 奇亿网站建设C语言#xff0c;链表C实现单向链表深入理解Linux内核链表跟单链表不同#xff0c;双链表的节点包含两个指针#xff0c;一个指针指向上一个元素#xff0c;一个指针指向下一个元素。▌如下图学习数据结构的时候#xff0c;要像认识一个人一样#xff0c;要了解这个人有什… C语言链表C实现单向链表深入理解Linux内核链表跟单链表不同双链表的节点包含两个指针一个指针指向上一个元素一个指针指向下一个元素。▌如下图学习数据结构的时候要像认识一个人一样要了解这个人有什么特点比如喜欢打球喜欢喝酒之类的。学习数据结构也是一样要了解数据结构的特点。我们要学习双链表需要搞明白链表这几个特点创建链表往链表插入数据删除链表中的某个数据删除整个链表查找链表反转链表▌先看看如何创建一个链表创建一个链表无非就是搞定链表头没有头的链表就是死链表有头就表示这个链表是存在的。当然了可能会存在循环链表只有位置没有固定的头指针。创建一个pHead并且以后pHead头指针保持不动就表示我们创建好了一个链表头指针。typedef struct Node{struct Node *prev;struct Node *next;int elements; }pNode;pNode * CreateHead(void) {pNode *head  NULL;head  (pNode *)malloc(sizeof(struct Node));head-next  NULL;head-prev  NULL;return head; } ▌插入元素插入元素的方式有多种可以头插可以尾插也可以任意插我只写了简单的插入方式-尾插。int InsertElement(pNode *head,int element) {if(head  NULL){PRINTK_LINK(Head NULL\n);return (-1);}pNode * pTemp  head;while(pTemp-next ! NULL){pTemp  pTemp-next;}pNode * pElement  (pNode *)malloc(sizeof(struct Node));pElement-elements  element;pTemp-next  pElement;pElement-prev  pTemp;PRINTK_LINK(Element:%d\n,element);return (0); } ▌遍历一个链表遍历链表是常规的操作但是遍历链表的方法有很多种可以从头开始遍历可以从尾部开始在涉及二分查找的时候可以从中间某个位置开始遍历。虽然方法很多但是我只写了一种方法就是从头开始遍历链表因为是最简单的。int TraverseLink(pNode *head) {if(head  NULL){PRINTK_LINK(Head NULL\n);return (-1);}pNode * pTemp  head;while(pTemp-next ! NULL){pTemp  pTemp-next;PRINTK_LINK(Element:%d\n,pTemp-elements);}return (0); } ▌删除链表删除整个链表是把链表的每个元素都删除并且把头也删除并且把头指针指向NULL。如果需要找到链表中的某个元素并删除就需要先找到链表中的元素删除掉并且把前后的两个元素连在一起。int DeleteLink(pNode *head) {if(head  NULL){PRINTK_LINK(Head NULL\n);return (-1);}pNode * pTemp  head;while(pTemp-next ! NULL){pTemp  pTemp-next;}while(pTemp ! NULL){free(pTemp); pTemp NULL;pTemp  pTemp-prev;}return (0); } ▌完整代码#include stdio.h #include string.h #include stdlib.h#define LOG_TAG [LINK]: %s() line: %d  #define PRINTK_LINK(fmt, args...)  printf(LOG_TAG fmt, __FUNCTION__, __LINE__,  ##args)typedef struct Node{struct Node *prev;struct Node *next;int elements; }pNode;pNode * CreateHead(void) {pNode *head  NULL;head  (pNode *)malloc(sizeof(struct Node));head-next  NULL;head-prev  NULL;return head; }int InsertElement(pNode *head,int element) {if(head  NULL){PRINTK_LINK(Head NULL\n);return (-1);}pNode * pTemp  head;while(pTemp-next ! NULL){pTemp  pTemp-next;}pNode * pElement  (pNode *)malloc(sizeof(struct Node));pElement-elements  element;pTemp-next  pElement;pElement-prev  pTemp;PRINTK_LINK(Element:%d\n,element);return (0); }int TraverseLink(pNode *head) {if(head  NULL){PRINTK_LINK(Head NULL\n);return (-1);}pNode * pTemp  head;while(pTemp-next ! NULL){pTemp  pTemp-next;PRINTK_LINK(Element:%d\n,pTemp-elements);}return (0); }int DeleteLink(pNode *head) {if(head  NULL){PRINTK_LINK(Head NULL\n);return (-1);}pNode * pTemp  head;while(pTemp-next ! NULL){pTemp  pTemp-next;}while(pTemp ! NULL){free(pTemp);pTemp  pTemp-prev;}return (0); }int main() {pNode * pHead  CreateHead();InsertElement(pHead,13);InsertElement(pHead,8);InsertElement(pHead,0);InsertElement(pHead,4);InsertElement(pHead,485);InsertElement(pHead,94);TraverseLink(pHead);DeleteLink(pHead);return 0; } ▌程序输出ubuntu1804:~/c$ gcc shuanglianbiao.c  ./a.out [LINK]: InsertElement() line: 40 Element:13 [LINK]: InsertElement() line: 40 Element:8 [LINK]: InsertElement() line: 40 Element:0 [LINK]: InsertElement() line: 40 Element:4 [LINK]: InsertElement() line: 40 Element:485 [LINK]: InsertElement() line: 40 Element:94 [LINK]: TraverseLink() line: 56 Element:13 [LINK]: TraverseLink() line: 56 Element:8 [LINK]: TraverseLink() line: 56 Element:0 [LINK]: TraverseLink() line: 56 Element:4 [LINK]: TraverseLink() line: 56 Element:485 [LINK]: TraverseLink() line: 56 Element:94 ▌总结我上面的代码只设计了链表头如果设计链表尾部指针应用会更加灵活。相比于单链表双链表的操作会更加灵活当然每一个节点都需要新增一个指向于上一个位置的指针。双链表还可以把头尾连接起来变成一个环形队列。链表相对于数组来说插入和删除数据非常快因为不需要移动数据只需要改变指针的指向。双链表内存利用率高如果是内存紧张的硬件设备使用链表操作可以节省内存。相对于数组链表可以做到按需分配内存。链表是一种基础的数据结构建议做到自己能写出一个链表不要求十全十美我曾经面试遇到让我手撸一个栈。相对于那些C语言基础写代码更能彰显程序员的技术。推荐阅读专辑|Linux文章汇总专辑|程序人生专辑|C语言我的知识小密圈关注公众号后台回复「1024」获取学习资料网盘链接。欢迎点赞关注转发在看您的每一次鼓励我都将铭记于心~
http://www.zqtcl.cn/news/441785/

相关文章:

  • 做网站优化哪家好远程管理wordpress站群
  • 实用写作网站做企业策划的公司
  • 如何建立自己手机网站58招聘网站官网
  • 网站程序源码下载网站怎么做定位功能
  • 深圳vi设计公司联系西安seo诊断
  • 老虎淘客系统可以做网站吗绍兴网站专业制作
  • 小公司做网站需要 align center
  • 自己做的网站怎么上传网络什么网站可以找人做系统
  • 公司在兰州要做网站怎样选择做期货关注什么网站
  • 响应式网站是指自适应吗新开传奇网站首区
  • 做网站产品介绍wordpress 参数 传递
  • 网站颜色搭配技巧建设摩托车价格大全
  • 哪些网站可以做画赚钱宁波模板建站定制
  • 昆明门户网站建设wordpress权限设置
  • 设计网站建设图片wordpress博客置顶
  • 网站上海网站建设网站数据建设涉及哪些内容
  • 3d效果图教程网站宁波网站建设慕枫科技
  • 视频结交网站怎么做想创建一个网站
  • 电商网站销售数据分析上海企业信息登记号查询
  • 网站建设规划设计公司排名无锡网站建设 君通科技
  • 徐州网站开发要多少钱给个人网站做百度百科
  • 法语网站建设免费网站为何收录比较慢
  • 品牌网站推广软件seo内链优化
  • 广东律师事务所东莞网站建设做网站 怎么备案
  • shopnc本地生活o2o网站源码wordpress文章内多页效果
  • 深圳全国网站制作哪个好页面设计有哪几种风格
  • 网页设计作业网站素材和效果图夏天做啥网站致富
  • 利用帝国软件如何做网站网站友链交换平台
  • 简述网站开发技术深圳网站设计合理刻
  • wordpress网站名称寻找销售团队外包