一. 数据结构干货系列之一:线性表基本操作

1. 如果一个链表结点数大于等于2,把首节点变为尾结点

status A(LinkList L){   //L是无头结点的单链表
   if(L&&L->next){
   Q=L;     P=L->next;
   while(P->next) {P=P->next;}
   P->next=Q; Q->next=null;
   }
   return ok;
}  //如果一个链表结点数大于等于2,把首节点变为尾结点。

2. 将单循环链表拆成两个单循环链表

void AA(LNode *a,LNOde *b){//指针a,b分别指向单循环链表中的两个结点
     BB(a,b);
     BB(b,a);
}

void BB(LNode *s,LNode *q){
     p=s;
     while(p->next!=q) p=p->next;
     p->next=s;
}

3. 有一个递增有序的顺序表va。将 x 插入到顺序表的适当位置上,保持顺序表有序

Status Insert (SqList &va,ElemType x){
    int i;
    if(va.length=va.listsize) return (overflow);
    for(i=va.length; x<va.elem[i-1] ; i--){ //把x依次与表中的元素作比较(从表尾部开始),elem[i-1]表示当前元素,如果当前元素大于x,则把当前元素后移一个位置.
          va.elem[i] = va.elem[i-1];
    }
    va.elem[i]=x;//如果当前元素elem[i-1]小于等于x,则x插入到当前元素elem[i-1]的前面,则x的插入位置为elem[i].
    va.length++;
    return ok;
}

4. 在带头结点的单链表结构上实现线性表操作 Locate(L,x)

int LocateElem_L(LinkList &L,ElemType x){

    int i=1;
    p=L->next; //此时,结点p为首元结点
    while(p&&p->data != x){
        p=p->next;
        i++;
    }  //结点p为空,或者结点p的数据域等于x,循环结束

    if(!p) return 0;//如果p结点为空
    else return i;
}
时间: 2024-08-15 12:37:09

一. 数据结构干货系列之一:线性表基本操作的相关文章

数据结构学习系列之线性表(二)

前言 线性表链式存储结构的实现,通过这种方式实现的线性表,简称为链表,这是这篇文章的主题.与顺序存储相对应的是链式存储.链式存储逻辑结构相邻,物理结构可能相邻也有可能不相邻.链式结构的优点有:1.存储空间不限制(操作系统可支持的存储空间范围内):2.插入删除操作不需要移动元素等等.当然链式结构也有缺点,比如每个节点需要维护指向下一个节点的指针:比如需要查找某个节点时,需要从头节点开始查找,时间复杂度O(n)等等.总之,顺序存储以及链式存储各有优缺点,需要根据需求具体情况,选择合适的存储方式.没有

数据结构学习系列之线性表(三)

前言数据结构学习,发现坚持下来比较难,本次学习与上次学习间隔了几个月,不管怎样还是要强迫自己坚持下来. 静态链表 用数组模拟链式结构的线性表,对于没有指针的编程语言,只能使用这种方式来模拟.这是大师们想出来的实现方法,体会大师们的编程思路,站在大师们的肩膀上解决一个又一个的难题.每个节点包含一个游标(数组数字索引),用于指向下个节点,所以静态链表也称为游标链表.规定数组第一个元素为备用链表(未被使用的数组游标,静态链表初始化时,会生成备用链表)的头节点,数组最后一个元素为链表的头节点.当需要插入

数据结构学习系列之线性表(五)

前言 单向链表查找下一个元素很方便,要查找上一个元素时,需要从头开始向下遍历,很是麻烦.如何解决这个问题呢?使用双向链表结构可以解决这个问题. 双向链表 在单向链表的基础上,增加一个指向上一个节点的指针,这就形成了双向链表结构.因增加了一个指针域,故需要占用更多的内存空间,换就话说,用空间换时间.现在硬件越来越强,而价格越来越低,这种思想的应用案例越来越普遍. 代码实现 1 /** 2 * @desc 双向链表 3 * 4 * @date 2015/08/23 5 * @copyright by

数据结构学习系列之线性表(四)

前言 使用没有指针的语言模拟实现数据结构,会碰到一些莫名奇妙的问题 单向循环链表 之前学习的链表都是单向且最后一个节点指向空节点,如果最后一个节点指向头节点,这样就形成了一个环,名字叫单向循环列表,简称循环列表 源码(JS模拟实现) 包含了头指针以及尾指针的实现 /** * @desc 循环链表 * * @author WadeYu * @date 2015-08-15 * @copyright by WadeYu */ var Node = function(data){ this.data

数据结构与算法之线性表

前言 上一篇<数据结构和算法之时间复杂度和空间复杂度>中介绍了时间复杂度的概念和常见的时间复杂度,并分别举例子进行了一一说明.这一篇主要介绍线性表. 线性表属于数据结构中逻辑结构中的线性结构.回忆一下,数据结构分为物理结构和逻辑结构,逻辑结构分为线性结构.几何结构.树形结构和图形结构四大结构.其中,线性表就属于线性结构.剩余的三大逻辑结构今后会一一介绍. 线性表 基本概念 线性表(List):由零个或多个数据元素组成的有限序列. 注意: 1.线性表是一个序列. 2.0个元素构成的线性表是空表.

C++数据结构与算法_1_线性表 --顺序表的实现与分析

顺序表的实现与分析 引 --线性表的抽象基类: template <typename T> class LinearList { public: LinearList(); ~LinearList(); virtual int Size() const = 0; //返回线性表所能够存储的最大长度 virtual int Length() const = 0; //当前线性表的长度 virtual int Search(T &x) const = 0; virtual int Loca

C++数据结构与算法_2_线性表 --顺序表的应用示例

h2.western { font-family: "Liberation Sans",sans-serif; font-size: 16pt; }h2.cjk { font-family: "微软雅黑"; font-size: 16pt; }h2.ctl { font-family: "AR PL UMing CN"; font-size: 16pt; }h1 { margin-bottom: 0.21cm; }h1.western { fon

2、蛤蟆的数据结构笔记之二线性表

2.蛤蟆的数据结构笔记之二线性表 到了笔记二了,每个笔记开头都应该弄个语句激励一下自己和小伙伴. "人生中最重要的不是位置,而是前进的方向" 这次咱们学习表,没错是表.什么表?额,汉字真是博大精深,没错,只是个表.不要想歪了. 欢迎转载,转载请标明出处: 1.  定义 线性表(亦作顺序表)是最基本.最简单.也是最常用的一种数据结构.线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的.线性表的逻辑结构简单,便于实现和操作.因此,线性表

javascript实现数据结构: 稀疏矩阵之三元组线性表表示

稀疏矩阵(Sparse Matrix):对于稀疏矩阵,目前还没有一个确切的定义.设矩阵A是一个n*m的矩阵中有s个非零元素,设  δ=s/(n*m),称δ为稀疏因子, 如果某一矩阵的稀疏因子δ满足δ≦0.05时称为稀疏矩阵, 稀疏矩阵的压缩存储 对于稀疏矩阵,采用压缩存储方法时,只存储非0元素.必须存储非0元素的行下标值.列下标值.元素值.因此,一个三元组(i, j, aij)唯一确定稀疏矩阵的一个非零元素. 上图的稀疏矩阵A的三元组线性表为: ( (1,2,12), (1,3,9), (3,1

数据结构(二)——线性表简介

数据结构(二)--线性表简介 一.线性表简介 1.线性表简介 线性表是具有相同类型的n个数据元素的有限序列A0,A1,A2,...,An-1.Ai是表项,n是表的长度. 2.线性表的表现形式 线性表的表现形式:A.零个或多个数据元素组成的集合B.数据元素在位置上是有序排列的C.数据元素的个数是有限的D.数据元素的类型必须相同 3.线性表的性质 线性表的性质:A.A0为线性表的第一个元素,只有一个后继B.An-1为线性表的最后一个元素,只有一个前驱C.除A0与An-1外的其它元素既有前驱又有后继D