数据结构笔记(一)线性表的顺序表示和基本操作及其顺序表实现的集合运算(A-B)U(B-A)实例

数据结构C语言篇-顺序表基本运算编程实现 打卡第一天——线性表基本运算 顺序表基本运算编程实现线性结构的特点:一、线性表的定义二、线性表的类型定义三、线性表的顺序表示四、顺序存储结构的线性表类C语言表示:线性表的静态分配顺序存储结构顺序表的插入算法顺序表的删除算法五、删除算法的时间复杂度六、代码实现 (ps:此次练习主要是C语言练习,代码在文章末尾) 数据结构的形式定义: 数据结构名称=(D,S) 其中D为数据元素的有限集,S是D上关系的有限集 线性结构的特点: 在数据元素的非空有限集中, (1)存在唯一的一个被称做“第一个”的数据元素; (2)存 阅读详情

一、 线性表的顺序表示

定义:线性表的顺序表示指的是用一组地址连续的存储单位依次存储线性表的数据元素。

1、宏定义解释
ElemType :线性表数据元素数据类型
LIST_INIT_SIZE : 线性表初始数据元素容量
Status :函数返回值(一般替换int型)
error :0
INFEASIBLE :0
OK :0

2、线性表的动态分配顺序存储结构

#define LIST_INIT_SIZE  100   //线性表存储空间的初始化分配量
#define LISTINCREMENT   10    //线性表存储空间的分配增量
typedef struct{
    ElemType *elem;  //存储空间基址
    int length;      //当前长度
    int listise;     //当前分配的存储容量(以sizeof(ElemType)为单位)
}SqList;

二、13个基本操作
分别是:
建立线性表,清空线性表,销毁线性表
判空线性表,判满线性表,获得当前数据元素个数
获得指定位置的数据元素,定位符合一定条件的数据元素
获得一个数据元素的前驱,获得一个元素的后继
插入数据元素,删除数据元素
遍历线性表
1、建立线性表
初始条件:一个未初始化的线性表结构体

Status InitList(SqList &L){
    L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));  //申请存储空间
    if(!L.elem)
       exit(0); //存储分配失败
    L.length=0//空表的长度为0
    L.list=LIST_INT_SIZE;//初始数据元素存储容量
    return OK;
 }

2、清空线性表
初始条件:线性表存在
操作结果:清空线性表(将当前元素个数赋值0,遍历不出任何一个元素,相当于清空线性表)

Status ClearList(SqList &L)
{
     L.length=0;
     return Ok;
}

3、销毁线性表
初始条件:线性表已存在
操作结果:销毁线性表

Status Destroy(SqList &L)
{
    free(L.elem);
    L.elem=NULL;
    L.length=0;
    L.listsize=0;
    return OK;
}

4、判空线性表
初始条件:线性表存在
操作结果:线性表为空返回true,不为空返回false

bool  ListEmpty(SqList L)//不需要对线性表的成员变量进行改变,所以不使用引用
{
    return (L.length==0)?true:false;
}

5、判满线性表
初始条件:线性表存在
操作结果:若线性表已满返回true,否则返回false

bool  ListFull(SqList L)
{
    return (L.length==L.listsize)?true:false;
}

6、获取线性表当前元素个数
初始条件:线性表已存在
操作结果:返回线性表当前元素个数

int ListLength(SqList L)
{
    return L.length;
}

7、获得指定位置的数据元素
初始条件:线性表存在
操作结果:获得指定位置的数据元素并赋值给e

Status GetElem(SqList L,int i, ElemType &e)
{
    if(i<1||i>L.length)
    exit(error);
    e=*(L.elem+i-1);//(基址+i-1)即为第i个元素的地址
    return OK;
}

8、定位元素(获得符合一定条件的数据元素的位序)
初始条件:线性表已存在
操作结果:返回L中第一个与e满足关系的元素的位序,若不存在返回0
(注意:compare()表示一个关系判定函数,满足返回值为1,否则返回值为2,使用函数指针,方便调用)

int LocateElem(SqList L,ElemType e,status(*compare (ElemType,ElemType))//后面的是函数指针,会在最后有个例子说明
{
    Elem *p=L.elem;//P的初值为第一个元素的存储位置
    int i=1;//i的初值为第一个元素的位序
    while(i<=L.length&&!compare(*p++,e))//越界或已找到满足条件的元素
   //i的最大可能值为L.length+1
    {
        if(i<=L.length)
            return i;
        else
            return 0;
    }
 }

9、返回前驱
初始条件:线性表已存在,数据元素存在前驱
操作结果:查找数据元素,若线性表中有该元素且前驱存在,将前驱拷贝给一个与数据元素数据类型相同的变量;若前驱不存在,上述变量无定义

//返回前驱,equal要提前声明 
Status PriorElem(SqList L,ElemType cur_e,ElemType &pre_e)
{
   int a;
   a=LocateElem(L,cur_e,equal);
   if(!a||a==1)
   {
    cout<<"查找失败"<<endl;
    return error;
   }
   pre_e=*(L.elem+a-2);
   return OK;
 }

10、返回后继
初始条件:线性表已存在,数据元素存在后继
操作结果:查找数据元素,若线性表中有该元素且后继存在,将后继拷贝给一个与数据元素数据类型相同的变量;若后继不存在,上述变量无定义

Status NextElem(SqList L,ElemType cur_e,ElemType &next_e)
{
    int a;
    a=LocateElem(L,cur_e,equal);
    if(!a||a==L.length)
    {
      cout<<"查找失败"<<endl;
      return error;
    }
    next_e=*(L.elem+a);
    return OK;
 }

11、插入一个数据元素
初始条件:线性表存在
操作结果:在L中第i个元素之前插入新的元素e,L的长度加1

Status ListInsert(SqList &L,int i,ElemType e)
{
    ElemType *newbase,*q,*p;
    if(i<1||i>L.length+1)//i值不合法
    return error;
    if(L.length>=L.listsize) //当前存储空间已满,增加分配
    {
        if(!(newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType))))
        exit(0);//分配存储空间失败
        L.elem=newbase;//新基址
        L.listsize+=LISTINREMENT;//增加存储容量
    }
        q=L.elem+i-1;//q为插入位置
        for(p=L.elem+L.length-1;p>=q;--p)
        { *(p+1)=*p;//给插入位置之后的元素赋值达到之后元素后移一位的效果
        }
        *q=e;//插入e
        ++L.length;
        return OK;
 }

12、删除元素
初始条件:线性表已存在
操作结构:删除第i个数据元素并返回其值,L的长度减1

Status ListDelete(SqList &L,int i,ElemType &e)
{
    ElemType *p,*q;
    if(i<1||i>L.length)//i值不合法
    return error;
    p=L.elem+i-1;//p为被删除元素的位置
    e=*p;//被删除元素的值赋给e
    q=L.elem+L.length-1;//表尾元素的位置
    for(++p;p<=q;++p)
    *(p-1)=*p;
    L.length--;
    return OK;
}    

13、遍历线性表
初始条件:线性表已存在
操作结果:依次对L的每个元素使用函数f(),f()可以是输出函数,一旦操作失败,则操作失败

Status ListTraverse(SqList L, void(*f)(ElemType&))
{
    ElemType *p=L.elem;
    int i;
    for(i=1;i<=L.length;i++)
    f(*p++);
    cout<<endl;
    return OK;
  }

二、顺序表实现的集合运算(A-B)U(B-A)

#ifndef _SQLIST_
#define _SQLIST_

// 顺序表结构
struct sqlist {
    int len;
    int size;
    ElemType *elem;
};

// 顺序表初始化
void InitList( sqlist &L, int m )
{
    L.len = 0;
    L.size = m;
    if ( m == 0 )
       L.elem = NULL;
    else
        L.elem = new ElemType[ m ];
}

// 返回顺序表中序号为i的数据元素(i的合法值为1≤i<len)
bool GetElem( sqlist L, int i, ElemType &e )
{
    if ( i < 1 || i > L.len )
        return false;
    e = L.elem[i - 1];
    return true;
}

//置空顺序表
void ClearList( sqlist &L )
{
     L.len = 0;
}

//销毁顺序表
void DestroyList( sqlist &L )
{
    delete [] L.elem ;
    L.size = L.len = 0;
    L.elem = NULL;
}

//判断顺序表是否为空表
bool ListEmpty( sqlist L )
{
    if ( L.len == 0 )
        return true;
    else
        return false;
}

//求顺序表的长度
int ListLength( sqlist L )
{
    return L.len;
}

// 函数从第一个位置起查找与e匹配的数据元素,若存在返回它的位置
int LocateElem( sqlist &L, ElemType &e, bool( *compare ) ( ElemType &a, ElemType &b) )
{
    ElemType *p = L.elem;
    int i = 1;
    while ( i <= L.len && ! compare( *p, e) )
    {
        p++;
        i++;
    }
    if ( i <= L.len )
        return i;
    return 0;
}

// 在顺序表的第i个数据元素之前插入新的数据元素e(i的合法值为1≤i≤len+1)。
bool ListInsert( sqlist &L, int i, ElemType &e )
{
    if ( i < 1 || i > L.len + 1 )
        return false;                   // 插入位置i值不合法。
    if ( L.len >= L.size )
    {   // 表满则扩展空间。
        ElemType *newbase;
        newbase = new ElemType[ L.size + 10 ];
        if ( ! newbase )
            return false;
        for ( int j = 0; j < L.len; j++ )
            newbase[j] = L.elem[j];
        delete L.elem;
        L.elem = newbase;
        L.size += 10;
    }
    ElemType *p,*q;
    q = &L.elem [ i - 1 ];      // q为插入位置指针
    for ( p = &L.elem[ L.len - 1 ]; p >= q; --p )
        *( p + 1 ) = *p;                        // 插入位置及之后的数据元素后移
    *q = e;                                 // 插入e
    L.len++;                                    // 表长增1
    return true;
}

// 在顺序表的表尾插入新的数据元素e
bool ListAppend( sqlist &L, ElemType &e )
{
    if ( L.len >= L.size )
    {   //表满则扩展空间
        ElemType *newbase = new ElemType[ L.size + 10 ];
        if ( ! newbase )
            return false;
        for ( int j = 0; j < L.len; j++ )
            newbase[ j ] = L.elem[ j ];
        delete L.elem;
        L.elem = newbase;
        L.size += 10;
    }
    L.elem[ L.len++ ] = e;                      // 尾部插入e, 表长增1
    return true;
}

//函数在顺序表中删除第i个数据元素并用e返回(i的合法值为1≤i≤Len)
bool ListDelete( sqlist &L, int i, ElemType &e )
{
    if ( i < 1 || i > L.len )
        return false;                       // 删除位置i值不合法
    ElemType *p,*q;
    p = &L.elem[ i - 1 ];                   // p为删除位置指针
    e = *p;                                 // 被删除数据元素的值赋给e
    q = L.elem + L.len - 1;                     // q为表尾位置指针
    for ( ++p; p <= q; p++ )
     *( p - 1 ) = *p;                       // 被删数据元素之后的数据元素前移
    L.len--;                                    // 表长减1
    return true;
}

// 遍历:依次对顺序表中的每个数据元素visit()一次且仅一次。
void ListTraverse( sqlist &L, void( *visit ) ( ElemType &e ) )
{
    ElemType *p = L.elem;
    for ( int i = 0; i < L.len; i++ )
        visit( *p++ );
}

#endif
//==============================================
// 集合运算 (A - B) U (B - A)
//----------------------------------------------


#include <iostream>
typedef char ElemType;
#include "SqList.h"
using namespace std;

//匹配LocateElem函数中的函数参量compare,数据元素相等的条件由数据元素类型决定 
bool equal( ElemType &a, ElemType &b )
{
    if ( a == b )
        return true;
    else
        return false;           
}

//匹配ListTrverse函数中的函数参量Visit,输出的项数由数据元素类型决定  
void print( ElemType &e )
{
    cout << e;
}

// 使用顺序表实现集合运算(A-B)U(B-A),即找出两个集合中所有不同的元素  
void Differrence( sqlist &la, sqlist lb )
{
    int i;
    int lblen = ListLength( lb ); 
    for ( i = 1; i <= lblen; i++ )
    {   // 逐一读入B表的数据到A表中查找,若存在则从A表中删除,否则,插入至A表。 
        char e;
        GetElem( lb, i, e );    // 在顺序表中取值效率较单链表高,时间复杂度为O(1)。 
        int k = LocateElem( la, e, equal ); 
        if ( k ) 
            ListDelete( la, k, e );//在顺序表中删除一个数据元素须移动n/2个数据元素,时间复杂度为O(n)。   
        else
            ListAppend( la, e );    // 在顺序表表尾插入数据元素无须移动数据元素,时间复杂度为O(1)。            
    }    
}

// 建立以顺序表存储表示的集合 
void CreateList( sqlist &la, int &n )
{
    char e;
    for ( int i = 0; i < n; i++ )
    {
        cin >> e;
        ListAppend( la, e );
    }   
}        

int main()
{     
    cout << "---此程序实现集合运算(A-B)U(B-A)---" << endl << endl; 
    cout << "《线性表抽象数据类型用顺序表实现,数据元素类型是字符型》"; 
    cout << endl << endl;    
    sqlist la, lb;
    int n, m, size;

    cout << "请输入A表的初始空间大小:" ;
    cin >> size;
    InitList( la, size);
    cout << "请输入集合A中元素的个数:" ;
    cin >> n;
    cout << "请输入" << n << "个数据元素至集合A:" << endl;
    CreateList( la, n );

    cout << endl << "请输入B表的初始空间大小:" ;
    cin >> size;
    InitList( lb, size ); 
    cout << "请输入集合B中元素的个数:" ;
    cin >> m;
    cout << "请输入"<< m << "个数据元素至集合B:" << endl;
    CreateList( lb ,m );

    Differrence( la, lb );
    cout << endl;
    cout << "运算后的结果是:" << endl;
    ListTraverse( la, print );
    cout << endl << endl;
    DestroyList( la );
    DestroyList( lb );

    system( "pause" );
    return 0;
}    

【数据结构与算法】顺序表精讲 所属专栏:数据结构与算法 前期内容:1. 绪论1——抽象数据类型 2.绪论2——时间复杂度和空间复杂度 线性表的定义和特点 阅读详情

相关推荐

关于42步进电机驱动——基于STM32 HAL库实现

我找了好多资料,好多关于42步进电机的都是文档,这么文档都需要积分,需要积分就算了内容还非常差,浪费时间和电脑的内存。关于大部分是基于Arduino和51去驱动的 42步进电机驱动硬件如下: 首先你要了解步进电机的驱动原理,我也不啰嗦了,请看这边博客: 二相四线,四相五线,四相六线步进电机接线及驱动方法 , 看完这篇你就知道驱动和接线的原理了。 起初我也为如何接线烦恼,因为有些博客在讲述这些问题的时候没有讲的很透彻。 方法如下: ①用万用表调到欧姆档,用其中一个表笔搭在一个引脚上,依次测其它.

Jodan132的博客 1万+

利用c语言实现线性表构造,利用线性表的顺序结构求集合的并、交、差、补(C语言实现)...

昨天用数据结构中的线性表的顺序结构实现了关于集合的并、交、差、补的集合运算,做个记录,希望也能帮助到其他人。一、算法分析(1)用数组A,B,C,E表示集合。假定A={1,3,4,5,6,7,9,10},B={2,,3,4,7,8,10}, E={1,2,3,4,5,6,7,8,9,10},输入数组A,B,E(全集),输入数据时要求检查数据是否重复(集合中的数据要求不重复),要求集合A,B是集合E的...

weixin_32944341的博客 1712

《童虎学习笔记》5分钟用Keepalived搭建MySQL高可用实现虚ip自动漂移

1

tonghu_note的博客 5618

c语言顺序存储求并集,使用线性表的顺序结构来查找集合的并集,交集,差和补码(用C语言实现)...

昨天我在数据结构中使用了线性表的顺序结构,以对集合的并集,交集,差和补码执行集合操作. 记录下来,希望对别人有帮助.首先,算法分析(1)使用数组A,B,C和E表示集合. 假设A = {1,3,4,5,6,7,9,10},B = {2 ,, 3,4,7,8集合的交并差c语言,10}集合的交并差c语言,E = {1,2,3,4,5,6,7,7,9,10},输入数组A,B和E(全套). 输入数据时,需要...

weixin_31749595的博客 2015

吃透Chisel语言.02.Chisel+VS Code+Ubuntu/WSL2开发环境搭建与使用

既然是学Chisel语言,那肯定得先把环境配置好,磨刀不误砍柴工嘛。而且有个测试环境的话,在后期的学习过程中自己去试运行代码段可以加深学习效果。这里推荐使用Ubuntu或者基于WSL2(Windows Subsystem Linux 2)的Ubuntu,本人使用的是WSL2上的Ubuntu 20.04.3 LTS,在使用体验上与Ubuntu几乎没有区别,且能同时使用Windows提供的诸多便利。...

github-3rr0r的博客 8448

RAGFlow 系列教程 第14课:GraphRAG -- 知识图谱增强检索

RAGFlow v0.25.0深度解读了GraphRAG技术,通过构建知识图谱解决传统RAG在多跳推理问题上的局限。系统支持General GraphRAG和Light GraphRAG两种实现,包含四阶段构建流程:实体关系抽取、实体消解、社区检测和图持久化。核心代码位于rag/graphrag目录,采用LLM驱动的抽取机制,结合编辑距离和LLM确认的实体消解策略,以及Leiden社区检测算法。KGSearch模块通过多信号融合检索(实体+关系+N-hop+社区)实现高效查询。该系统将非结构化文本转化为可推

weixin_43674738的博客 101

线性表的顺序存储结构及操作的实现

要求:利用书本上的线性表的顺序存储结构定义: 1)编写完成下列功能的函数:(1)初始化一个线性表;(2)在已经初始化的基础上,创建一个包含15个不大于100的正整数值的线性表(15个值由计算机随机产生);(3)将一个数x插在第i个元素前(x和i在程序运行时输入);(4)删除第i个元素(i在程序运行时输入),并在删除结束后输出删除元素的值;(5)查找给定值x是否在线性表中(x在程序运行时输入),若在,输出x在线性表中第一次出现的位置,若不在就输出x不在表中的提示;(6)输出线性表中所有元素。 2)要求编一

m0_56804824的博客 2282

AI辅助需求分析与提示词生成

文章标题 《AI辅助需求分析与提示词生成》 关键词 人工智能 需求分析 提示词生成 深度学习 机器学习 强化学习 数学模型 系统架构

AI天才研究院 1214

数据结构——顺序表基本操作

1.学会定义线性表的顺序存储类型,实现C程序的基本结构,对线性表的一些基本操作和具体的函数定义。 2.掌握顺序表的基本操作,实现顺序表的插入、删除、查找以及求并集等运算。 3.掌握对多函数程序的输入、编辑、调试和运行过程。 写程序实现顺序表的下列基本操作: (1)初始化顺序表La typedefstruct{ ElemType*elem;//存储空间基地址 intlength;//当前长度 intlistsize;...

weixin_55763489的博客 948

024、反激变换器的短路保护设计

本文详细探讨了反激变换器短路保护的设计要点与实践经验。作者通过实际案例分析了短路时反激拓扑的电流特性,指出初级峰值电流限制是最基础的保护手段,但需配合打嗝模式使用。文章重点剖析了打嗝模式设计的三个关键陷阱:频率设定、退出条件和软启动衔接。同时强调次级侧辅助保护、变压器参数优化、环路响应协调的重要性,并比较了自恢复与锁死方案的适用场景。最后提出实测验证的四个关键点和设计经验:不盲信芯片手册、保护电路独立设计、充分留有余量、进行破坏性测试。全文以工程实践为导向,为反激电源的可靠短路保护提供了系统性解决方案。

Jack010169的博客 242

基于深度学习的CT图像肺结节分割与检测系统[完整代码数据分享]

基于深度学习的CT图像肺结节分割与检测系统[完整代码数据分享]

269

1:数据结结构复习线性表(一般集合的并集:顺序表解决方案)

上述算法的时间复杂度取决于抽象数据类型List定义中基本操作的执行时间,假设LA和LB的表长分别为m和n,循环执行n次,则:当采用顺序存储结构时,在每次循环中,GetElem 和ListInsert这两个操作的执行时间和表长无关,LocateElem 的执行时间和表长m成正比,因此,算法的时间复杂度为O(m * n)。可以利用两个线性表LA和LB分别表示集合A和B (即线性表中的数据元素为集合中的成员),这样只需扩大线性表LA,将存在于LB中而不存在于LA中的数据元素插人到LA中去。

weixin_63215361的博客 650

lammps案例:扭转

扭转有两种方式,一是固定一端旋转另外一端,二是两端沿相反的方向旋转。案例为两侧旋转方式,扭转后的效果如图所示。

lammps_jiayou的博客 1199

假设利用两个线性表LA和LB分别表示两个集合A和B(即线性表中的数据元素即为集合中的成员),现要求一个新的集合A=AUB。这就要求对线性表作如下操作:扩大线性表LA,将存在于线性表LB中而不存在于线性

假设利用两个线性表LA和LB分别表示两个集合A和B(即线性表中的数据元素即为集合中的成员),现要求一个新的集合A=AUB。这就要求对线性表作如下操作:扩大线性表LA,将存在于线性表LB中而不存在于线性表LA中的数据元素插入到线性表LA中去。只要从线性表LB中依次取得每个数据元素,并依值在线性表LA中进行查访,若不存在,则插入之。 #include <stdio.h> #include <stdlib.h> #define TRUE 1 #define FALSE 0 #define

AKK188888881的博客 9339

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

算法2.1 假设利用两个线性表LA和LB分别表示两个集合A和B(即线性表中的数据元素即为集合中的成员),现要求一个新的集合A=AUB。这就要求对线性表作如下操作:扩大线性表LA。。。

数据结构(C语言版)严蔚敏 吴伟民 例2-1 假设利用两个线性表LA和LB分别表示两个集合A和B(即线性表中的数据元素即为集合中的成员),现要求一个新的集合A=AUB。这就要求对线性表作如下操作:扩大线性表LA,将存在于线性表LB中而不存在于线性表LA中的数据元素插入到线性表LA中去。只要从线性表LB中依次取得每个数据元素,并依值在线性表LA中进行查访,若不存在,则插入之。 说明:为了展示结果,代码加入线性表的抽象数据类型的全部构造,实际是UnionList函数达成该练习结果,因为该函数内需要调用抽象数据类

Made in Code 1万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

数据结构基础(二)——线性表之顺序存储结构

线性表(线性存储结构)线性表是最基本、最简单、也是最常用的一种数据结构。它是数据结构与算法的基础之一。例如26个英文字母表:(A,B,C,D,···,Z)或者学生基本信息表又或者十二星座的排序等等,它们都是线性表。 一.线性表的定义和特点 线性表(linear list):是n个具有相同特性的数据元素的有限序列。数据元素是一个抽象的符号,其具体含义在不同的情况下一般不同。 n的个数代表线性表的长...

qq_45836560的博客 1345

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

数据结构实验-线性表的顺序

(2)合并顺序表模块中调用了顺序表元素的插入函数,而插入函数需要找到移动元素后空出位置才能插入元素,则平均时间复杂度为O(n),合并顺序表中是在while语句中调用的插入元素,则合并顺序表模块的时间复杂度为O(n2)。(2) 演示程序以用户和计算机的对话方式执行,即在计算机终端上显示“提示信息”后,由用户在键盘上输入演示程序中规定的运算命令,相应的输入数据(滤去输入中的非法字符)和运算结果显示在其后。(3)删除L3中相同的元素,即相同的元素只保留一个,要求时间复杂度为O(n)或者更高效;

qq_51935763的博客 759

数据结构——“线性表“ 排队点餐的初代结构模型你了解吗

文章目录线性表概念线性表的定义:线性表的表示方法:线性表的特征:线性表的基本操作线性表的合并运算线性表去重运算线性表的顺序存储结构1. 顺序存储结构的特点:随机存取2. 顺序存储实现3. 顺序表——创建 线性表概念 线性表如排也比较常见啊,就经常咱们排的队啊,就是一个线性表,比如说你上医院去挂号,然后大家都会很自觉的排成一溜长队。那这个排的队列啊就是一个线性表。 那我在队列中如何确定自己当前的位置呢? 有人会说我可以从头开始数,看自己是第几个,这是没有问题的,但是如果说你前面的人发生变化的时候,那这个

weixin_44278698的博客 1426

一. 线性表

线性表 1.线性表定义 定义:是具有相同数据类型的n(n>=0)个数据元素的有限序列。 两个特点: 相同的数据类型 有限序列 2.线性表的操作 (1)基本操作 注:基本操作包含建立和销毁线性表,是对线性表的修改,因此传入参数应为线性表的指针。 结构初始化:InitList(*L)——构造一个空的线性表 销毁结构:DestroyList(*L)线性表已存在——>销毁该线性表 (2)引用型操作(6个) 注:引用型操作不对线性表进行修改,因此不用传入指向线性表的指针。 判空:ListEmpt

未来科学研究所 699

合并两个集合

题目描述: 假设有两个集合 A 和 B 分别用两个线性表 LA 和 LB 表示,编写一个算法求一个新的集合C=A∪B,即将两个集合的并集放在线性表LC中。 #include<stdio.h> #include"sqlist.cpp" /* 假设有两个集合 A 和 B 分别用两个线性表 LA 和 LB 表示, 即线性表中的数据元素即为集合中的成员。 编写一个算法求一个新的集...

Lau's Blog 3466

c语言集合运算有菜单,怎样用C语言实现集合运算

【转】STL算法-合并(集合)hechao322514692017-02-24R:集合运算thoixy29792014-10-27C++ STL 集合运算weixin_429930546052018-08-24集合的整数表示u0115831201092017-10-02集合运算weixin_42868863292019-01-22c语言集合的运算qq_2673824952015-05-22Tsin...

weixin_42321086的博客 1467

数据结构 线性表

数据结构实验一作业

LHB1724的博客 341

数据结构之线性表

第二章 线性表 线性表是最基本、最简单、也是最常用的一种数据结构。 一 顺序表 1 定义 顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素、使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系,采用顺序存储结构的线性表通常称为...

141

C++实现数据结构之线性表、栈和队列

三种基本的数据结构前言ADT结点类线性表A.顺序实现B.链式实现栈顺序实现链式实现队列顺序实现链式实现 前言 接触csdn的第一篇博客,用来记录对数据结构与算法这门课的所学与收获。同时也是第一次尝试Markdown编辑。 ADT 抽象数据类型(Abstract Data Type,ADT) 通常是对数据的某种抽象,定义了数据的取值范围及其结构形式,以及对数据操作的集合 特征 1.数据抽象 2.数据封装 3.继承性 4.多态性 在接下来的具体实现中,所有的顺序实现与链式实现的类将继承自一个拥有许多纯虚

qq_25987429的博客 1314

数据结构-线性表

例1、假设有两个线性表LA和LB分别表示两个集合A和B,现要求一个新集合A=A U B(集合的并)。 算法思想:扩大线性表LA,将表LB中不在LA中出现的元素插入到LA中。只要从线性表LB中依次取出每个元素,按值在线性表LA中查找,若没查到则插入之。 算法描述: void union (Linear_List LA ,Linear_List LB) //假定Linea...

David-Wang的博客 1529

【数据结构C++】线性表/顺序表-数组与vector

在数据结构专栏(本专栏)中,我们将总结数据结构与算法的理论知识和结合LEETCODE相关题目的应用,旨在将零散的知识点按章节形成系统的知识库,并将知识应用于代码编写中。因为数组的在内存空间的地址是连续的,所以我们在删除或者增添元素的时候,就难免要移动其他元素的地址。数组的元素是不能删的,只能覆盖。支持随机访问:用户可以向使用数组的方式访问vector中的每一个元素,但vector不适宜做任意位置的插入和删除操作,因为要进行大量元素的搬移,比如插入。C++数组C++ vector用法详解。

JingYan_Chan的博客 1566
上一篇: Java代码点和代码单元及其区别
下一篇: 数据结构笔记(二)线性表的链式表示和基本操作
VicTree
博客等级 码龄10年 23粉丝 16原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值