• 线性表的结构定义:

    • 顺序表的结构定义:

      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

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

  1. 数据结构笔记1 线性表-顺序表示

    预定义: 一.线性表的顺序表示 一些操作: 1. 线性表的初始化(参数为引用) //下列:函数返回类型 函数名称初始化线性表 参数表(参数类型 引用参数) Status InitList_Sq(SqL ...

  2. 数据结构线性表基本操作

    数据结构线性表基本操作 基本内容 线性表的顺序表示和实现 线性表的顺序存储表示 顺序表中基本操作的实现 1.顺序表的初始化 2.取值 3.查找 4.插入 5.删除 线性表的链式表示和实现 单链表的定义 ...

  3. C语言数据结构-第二章线性表-电大

    第二章线性表--内容简介 本章将进入线性结构的学习. 线性结构是最简单.最常用的一种数据结构. 本章将学习线性表的定义.顺序和链式两种存储方式及相应存储结构上的运算实现.通过典型示例训练,掌握线性表的 ...

  4. Java版数据结构与算法——线性表

    *************************************优雅的分割线 ********************************** 分享一波:程序员赚外快-必看的巅峰干货 如 ...

  5. 大话西游之王道考研数据结构第一讲---线性表的顺序表示

    大话西游之王道考研数据结构第一讲---线性表的顺序表示 写在前面的话 王道考研数据结构是一本非常好的书,本系列所有的内容是按照其书进行讲述的,所以您可以以那本书作为主要内容,这个做参考. 大学时候,在 ...

  6. 【数据结构】除去线性表中的重复数字

    题目:写一个算法将单链表中值重复的结点删除,使所得的结果表中各结点值均不相同. 刚看到这个题目给我第一个思路是冒泡排序,可以利用冒泡排序的两层循环找出相同的结点,然后free掉.第一层循环是控制循环的 ...

  7. Algorithms_基础数据结构(04)_线性表之链表_单向循环链表约瑟夫环问题

    文章目录 大纲图 链表的经典面试题目 如何设计一个LRU缓存淘汰算法 约瑟夫问题 结构 分析 大纲图 链表的经典面试题目 如何设计一个LRU缓存淘汰算法 tip:单向链表 约瑟夫问题 N个人围成一圈, ...

  8. 数据结构复习题(线性表)

    数据结构复习题(线性表) 线性表 选择题 填空题 判断题 解答题 顺序表的插入和删除 单链表的插入与删除,创建 线性表 选择题 用单链表方式存储的线性表,存储每个节点需要两个域,一个是数据域,另一个是 ...

  9. 算法与数据结构(一):线性表(C++实现)

    文章目录 算法与数据结构(一):线性表(C++实现) 头文件定义线性表类的成员变量和成员函数 头文件类成员函数的实现 主函数 参考:算法分析与设计(C++描述) 石志国.刘冀伟.姚亦飞编著 算法与数据 ...

最新文章

  1. CTFshow 命令执行 web62
  2. 开源 | App 开发神仙工具:帮你抓 Bug
  3. java笔记(3):String(2)
  4. python ftp编程_【编程】Python FTP
  5. tomcat乱码问题解决集合
  6. 川土微电子 | 隔离电源的辐射抑制设计参考(四)
  7. 十大排序算法之二路归并排序(难点为对于递归的理解)
  8. 绕过卡巴斯基dump进程lsass.exe内存
  9. 【用友CTO】解读企业数字化中台
  10. 平均值、中位数、众数、极差分别是什么?各有什么有点和缺点?
  11. 如何打开控制面板(windows10)
  12. express 配置ip
  13. 如何用PS(photoshop)给照片加文字
  14. C语言入门——初识C语言
  15. BlueTooth: 蓝牙基带数据传输机理分析
  16. 实现微信小程序与微信生态的互相跳转H5入口
  17. BI平台:怎么进行报表的开发和搭建
  18. 线程二—— 网图下载
  19. QT 多语言 字库 编码 文字方向相关问题
  20. 数学笔记23——部分分式

热门文章

  1. python两个二维数组加法_对二维数组的多个列进行Numpy平均
  2. 汇编语言 把最大值放入max 把最小值放入min_Excel求最大值地球人都知道,那要求出第2、第3、第N大值呢?...
  3. hive币2021年预计涨到多少_比特币突破4万美元,比特币2021年会涨到多少?
  4. mvc 模式和mtc 模式的区别
  5. ListMapSet的操作和遍历 1
  6. phpize增加php模块
  7. 如何使用Notepad++格式化XML文件
  8. Node — 第九天 (ES6降级 and 发布属于自己的[第三方模块]包)
  9. 免费分享老男孩全栈9期视频,共126天
  10. [bzoj3625][Codeforces 250 E]The Child and Binary Tree(生成函数+多项式运算+FFT)