2.数据结构笔记学习--线性表基本操作

  • 线性表的结构定义:
    • 顺序表的结构定义:
      typedef struct
      {int data[maxSize];  //存放顺序表元素的数组,一般用 int A[maxSize];int length;         //存放顺序表的长度,一般用 int n;
      }SeqList;

       

    • 单链表结点定义:
      typedef struct LNode
      {int data;  //存放结点的数据域struct LNode *next;         //指向后继结点的指针
      }LNode;

       

    • 双链表结点定义:
      typedef struct DLNode
      {int data;  //存放结点的数据域struct DLNode *prior;        //指向前驱结点的指针struct DLNode *next;         //指向后继结点的指针
      }DLNode;

       

  • 顺序表的算法操作:
    • 按元素值的查找算法:
      int LocateElem (SeqList L, int e)
      {int i;for(i=1; i<=L.Length; i++)if(e=L.data[i])return i;return 0;
      }

       

    • 插入数据元素的算法:
      //在p的位置插入新的元素e
      int insert(SeqList &L, int p, int e)  //为啥用&L
      {int i;if(p<1 || p>L.length+1 || L.length>maxSize-1)  //范围不正确return 0;for(i=L.length; i>=p; --i)  // 依次后移L.data[i+1] = L.data[i];++(L.length);return 1;
      }

       

    • 初始化顺序表:
      //初始化顺序表
      void InitList(SeqList &L)
      {L.length = 0;
      }

       

    • 求指定位置元素:
      //e返回L中p的元素
      int GetElem (SeqList L, int p,int &e)  //e用引用类型
      {if(p<1||p>L.length)return 0;e = L.data[p];return 1;
      }

       

  • 单链表的算法操作:
    • 尾插法:
      //n个元素存储在数组a中,尾插法建立链表C
      void CreatelistR(LNode *&C, int a[], int n)  //要改变的变量用引用型
      {LNode *s, *r;  //s指向新申请的结点,r指向C的终端结点int i;C = (LNode *)malloc(sizeof(LNode)); //申请C的头结点空间C->next =NULL;r=C;  //此时的终端结点就是头结点for(i=1; i<=n; ++i)  //为啥++i,不是i++
          {s = (LNode* )malloc(sizeof(LNode));s->data = a[i];//用新结点接收a的一个元素r->next = s; //r接纳新结点r = r->next;//r指向终端结点,以便接纳下一个结点
          }r->next = NULL;
      }
    • 头插法:
      //n个元素存储在数组a中,头插法建立链表C
      void CreatelistF(LNode *&C, int a[], int n)  //要改变的变量用引用型
      {LNode *s;  int i;C = (LNode *)malloc(sizeof(LNode)); //申请C的头结点空间C->next =NULL;for(i=1; i<=n; ++i)  //为啥++i,不是i++
          {s = (LNode* )malloc(sizeof(LNode));s->data = a[i];//用新结点接收a的一个元素s->next = C->next; //s所指向的指针域next指向C的开始结点C->next = s;//头结点的指针域next指向s结点,s成为新的开始结点
          }
      }
  • 双链表的算法操作:
    • 尾插法建立双链表
      //尾插法建立双链表
      void CreateDlistR(DLNode *&L, int a[], int n)
      {DLNode *s,*r;int i;L = (DLNode*)malloc(sizeof(DLNode));L->next = NULL;r=L;  // r始终指向终端结点,开始头结点也是尾结点for(i=1; i<=n; i++){s = (DLNode*)malloc(sizeof(DLNode));s->data = a[i];//将s插入到L的尾部,并且r指向s,这一部分是主要记忆代码r->next = s;s->prior = r;r = s;}r->next = NULL;}
    • 查找结点算法:
      DLNode* searchNode(DLNode *C, int x)
      {DLNode *p = C->next;while(p!= NULL){if(p->data == x)break;p = p->next;}return p;
      }
    • 插入结点的算法
      s->next = p->next;
      s->prior = p;
      p->next = s;
      s->next->prior = s;  //假如p指向最后一个结点,本行可去
    • 删除结点的算法:
      q = p->next;
      p->next = q->next;
      q->next->prior = p;
      free(q);

 

转载于:https://www.cnblogs.com/frl520/p/9408476.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/253918.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(四)RTL级低功耗设计

前面介绍了系统级的低功耗设计&#xff0c;换句话说就是在系统级降低功耗可以考虑的方面。系统级的低功耗设计&#xff0c;主要是由系统级设计、具有丰富经验的人员实现&#xff0c;虽然还轮不到我们设计&#xff0c;我们了解一下还是比较好的。我们前端设计人员的重点不在系统…

Unity3D 游戏前端开发技能树(思维导图)

如果做游戏也是一种游戏,那么这个游戏的自由度实在是太高了.(导图源文件链接&#xff1a;http://pan.baidu.com/s/1eSHpH5o 密码&#xff1a;qzl5) 最近要用思维导图软件Xmind把自己的思路好好捋一捋,算是温故知新吧. 转载于:https://www.cnblogs.com/qiaogaojian/p/6098962.ht…

js forEach

&#xfeff;&#xfeff;forEach()函数从头到尾把数组遍历一遍。有三个參数各自是&#xff1a;数组元素。元素的索引&#xff0c;数组本身&#xff08;假设是一个參数就是数组元素&#xff0c;也就是数组的值。var data[1,2,3,4,5,6]; var sum0; data.forEach(function(v){//当…

SQL Server 死锁的告警监控

原文:SQL Server 死锁的告警监控今天这篇文章总结一下如何监控SQL Server的死锁&#xff0c;其实以前写过MS SQL 监控错误日志的告警信息&#xff0c;这篇文章着重介绍如何监控数据库的死锁&#xff0c;当然这篇文章不分析死锁产生的原因、以及如何解决死锁。死锁&#xff08;D…

关于web性能一些特性汇总

关于web性能一些特性汇总 DOMContentLoaded & load load事件是window对象上的事件。指的是网页资源已经加载完毕&#xff08;包括但不限于DOM、图片、音频、脚本、插件资源以及CSS&#xff09;。 DOMContentLoaded事件是document对象上的事件。指的是DOM已经加载完毕。IE中…

(五)门级电路低功耗设计优化

&#xff08;1&#xff09;门级电路的功耗优化综述 门级电路的功耗优化(Gate Level Power Optimization&#xff0c;简称GLPO)是从已经映射的门级网表开始&#xff0c;对设计进行功耗的优化以满足功耗的约束&#xff0c;同时设计保持其性能&#xff0c;即满足设计规则和时序的要…

SQL三大范式

第一范式(1NF) (必须有主键&#xff0c;列不可分) 数据库表中的任何字段都是单一属性的&#xff0c;不可再分 create table aa(id int,NameAge varchar(100)) insert aa values(1,无限-女 ) 没有达到第一范式 create table aa(id int,name varcahr(10),age char(2)) insert aa …

Spring3向Spring4升级过程中quartz修改

为什么80%的码农都做不了架构师&#xff1f;>>> 问题 nested exception is org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [org.springframework.scheduling.quartz.CronTriggerBean] for bean with name ... 原因 org.spri…

Socket编程知识必学/SELECT 编程

Select在Socket编程中还是比较重要的&#xff0c;可是对于初学Socket的人来说都不太爱用Select写程序&#xff0c;他们只是习惯写诸如 connect、accept、recv或recvfrom这样的阻塞程序&#xff08;所谓阻塞方式block&#xff0c;顾名思义&#xff0c;就是进程或是线程执行到这些…

EasyUI--messager

1.    alert 方法 <script type"text/javascript">$( function(){$.messager.alert("调用messager","文本内容") ;});</script> 这里还可以通过icon添加相应的图标及info加入回调函数 <script type"text/javascript&quo…

ROS与navigation教程——基本导航调整指南

说明&#xff1a; 介绍如何调整机器人上的ROS导航包 步骤&#xff1a; (1) 机器人导航需要那些准备? 在调整新机器人上的导航包时遇到的大部分问题都在本地规划器调谐参数之外的区域。机器人的里程计&#xff0c;定位&#xff0c;传感器以及有效运行导航的其他先决条件常常…

小程序跨行跨列多列复杂表格实现

今天来实现个跨行跨列多列表格。 如图&#xff0c;这是个列数不确定&#xff0c;有的单元格还要跨行跨列的复杂表格。 这里暂时最多支持4列&#xff0c;列数再多就放不下了。 实现原理 实现原理比较简单&#xff0c;通过多个嵌套的循环将数据取出。 上面的例子中&#xff0c;最…

Redis学习第八课:Redis高级实用特性(一)

Redis高级实用特性 注&#xff1a;我学习的环境是vmware7.1 ubantu10.10 redis 3.0.2 1、安全性 设置客户端连接后进行任何其他指定前需要的密码。因为redis速度相当快&#xff0c;一个外部用户可以在一秒钟进行很多次的密码尝试&#xff0c;这就需要设定非常强大的密码来防止…

分布式缓存的面试题9

1、面试题 如何保证缓存与数据库的双写一致性&#xff1f; 2、面试官心里分析 你只要用缓存&#xff0c;就可能会涉及到缓存与数据库双存储双写&#xff0c;你只要是双写&#xff0c;就一定会有数据一致性的问题&#xff0c;那么你如何解决一致性问题&#xff1f; 3、面试题剖析…

ROS与navigation教程——概述

navigation是ROS的二维导航功能包&#xff0c;简单来说&#xff0c;就是根据输入的里程计等传感器的信息流和机器人的全局位置&#xff0c;通过导航算法&#xff0c;计算得出安全可靠的机器人速度控制指令。 代码库&#xff1a;https://github.com/ros-planning/navigation 代…

Linux下c开发 之 线程通信与pthread_cond_wait()的使用

pthread_cond_wait() /************pthread_cond_wait()的使用方法**********/pthread_mutex_lock(&qlock); pthread_cond_wait(&qready, &qlock);pthread_mutex_unlock(&qlock);/*****************************************************/The mutex passed …

ROS与navigation教程——ACML参数配置

<launch> <!--//后为wiki官网的参数说明 &#xff08;&#xff09;中为粗读算法参数说明及理解 面临的问题常用地图有2种&#xff1a;1.基于特征&#xff0c;仅指明在指定位置&#xff08;地图中包含的对象的位置&#xff09;的环境的形状。特征表示使得调节对象的位置…

【设计模式】单例模式 Singleton Pattern

通常我们在写程序的时候会碰到一个类只允许在整个系统中只存在一个实例&#xff08;Instance&#xff09; 的情况&#xff0c; 比如说我们想做一计数器&#xff0c;统计某些接口调用的次数&#xff0c;通常我们的数据库连接也是只期望有一个实例。Windows系统的系统任务管理器…

修改输入框placeholder的默认样式

一般网页中都用到input的placeholder属性&#xff0c;想让这个默认样式和网页保持一致&#xff0c;就需要重新设定样式&#xff0c;百度百度&#xff1a; :-moz-placeholder { / color: #000; opacity:1; }支持/* Mozilla Firefox 4 to 18 * ::-moz-placeholder { color: #000;…

进程及线程通信总结

上文我们介绍了如何建立一个简单的多线程程序&#xff0c;多线程之间不可避免的需要进行通信 。相比于进程间通信来说&#xff0c;线程间通信无疑是相对比较简单的。 首先我们来看看最简单的方法&#xff0c;那就是使用全局变量&#xff08;静态变量也可以&#xff09;来进行通…