精华内容
下载资源
问答
  • 线性表结构——顺序初始化,插入,删除,查找。typedef 解释,链表知识点总结
    千次阅读 多人点赞
    2019-04-15 18:15:58

    目录

    一、顺序表定义及特点

    1.顺序表定义

    2.顺序表特点

    二、顺序表定义

    三、顺序表插入运算

    四、顺序表删除运算

    五、顺序表元素查找

    六、顺序表取元素数据

    七、主函数定义

    注1. typedef 解释

    注2. 链表知识点总结


    一、顺序表定义及特点

     

    1.顺序表定义

    用数组存储线性表,称作线性表的顺序存储结构或顺序映像,用这种方法存储的线性表称作顺序表。

    2.顺序表特点

    1)逻辑上相邻,对应物理地址相邻

    2)任一元素可以随机存取

    3)容量难以扩充,插入、删除操作复杂

    二、顺序表定义

    //顺序表定义
    typedef int ElemType;           //顺序表元素类型为整形
    const int LIST_SIZE = 1024;     //顺序表最大长度为1024
    typedef struct sequen
    {
        ElemType data[LIST_SIZE];   //顺序表所要存储的数据
        int last;                   //指向顺序表最后一位数据的指针
    }SeqList;                       //结构体别名,在主函数中可以有声明变量 SeqList list;
    SeqList* LPtr;                  //定义顺序表指针变量
    

    关于 typedef 的解释可详见下方的注释1.

    三、顺序表插入运算

    一般情况下,要在第 i(1 <= i <= n)个元素之前插入一个新元素时,首先要从最后一个元素开始,直到第 i 个元素之间共n - i + 1 个元素依次向后移动一个位置。移动结束后,第 i 个位置就被空出,然后将新元素插入,插入结束线性表的长度增加1。

    /*=================================================
    函数功能:顺序表运算——元素的插入
    函数输入:顺序表地址,插入值,插入位置
    函数输出:完成标志—— 0:异常  1:正常
    =================================================*/
    int Insert_SqList(SeqList *Lptr, ElemType x, int k)
    {
        if(Lptr->last >= LIST_SIZE - 1)             //判断是否内存溢出
            return false;
        else if(k < 0 || k > (Lptr->last + 1))      //插入点为非法位置
            return false;
        else
        {
            for(int i = Lptr->last; i >= k; i--)
                Lptr->data[i + 1] = Lptr->data[i];
            Lptr->data[k] = x;                      //将 X 放入第 k 个位置
            Lptr->last = Lptr->last + 1;            //修改最后结点指针 last
        }
        return true;
    }

    四、顺序表删除运算

    在顺序表上实现删除运算也需要移动结点,以填补删除操作造成的空缺,从而保证删除后的元素间依然通过物理地址相邻而体现逻辑相邻关系。若 1 <= i <= n - 1,必须将表中位置 i + 1, i + 2, ..., n的结点,依次前移到位置 i, i + 1, ..., n - 1上,需将 i + 1至第 n 共n - 1个元素前移。

    /*=================================================
    函数功能:顺序表运算——元素的删除
    函数输入:顺序表地址,删除位置
    函数输出:完成标志—— 0:异常  1:正常
    =================================================*/
    int Delete_SqList(SeqList *Lptr, int k)
    {
        if((k >= 0 && k <= Lptr->last) && (Lptr->last != 0))
        {
            for(int i = k; i <= Lptr->last; i++)
                Lptr->data[i] = Lptr->data[i + 1];
            Lptr->last--;
            return true;
        }
        return false;
    }

    五、顺序表元素查找

    从第一个元素开始,逐个把元素的关键字值和给定值比较,若某个元素的关键字值和给定值相等,则查找成功;否则,若直至第n个记录都不相等,说明不存在满足条件的数据元素,查找失败。

    /*=================================================
    函数功能:顺序表运算——查找给定的值
    函数输入:顺序表地址,结点值
    函数输出:完成标志—— 正常:下标值  异常:-1
    =================================================*/
    int Locate_SqList(SeqList *Lptr, ElemType key)
    {
        for(int i = 0; i < Lptr->last; i++)
            if(Lptr->data[i] == key)
                return i;
        return false;
    }

    六、顺序表取元素数据

    由于顺序表是数组结构,属于随机存取结构,故已知下标就可以直接得到对应的数组元素值,只需要注意判断给定的下标是否出界即可。

    /*=================================================
    函数功能:顺序表运算——取给定下标的元素值
    函数输入:顺序表地址,下标位置,下标元素数据
    函数输出:完成标志—— 异常:-1  正常:下标元素数据
    =================================================*/
    int Get_SqList(SeqList *Lptr, int k, ElemType e)
    {
        if(k < 0 || k > Lptr->last)
            return false;
        if(Lptr->last < 0)
            return false;
        e = Lptr->data[k];
        return e;
    }

    七、主函数定义

    int main(int argc, const char * argv[])
    {
        //线性表初始化
        //SeqList list = {{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, 10}; //另一种初始化方法
        SeqList* list = (SeqList *)malloc(sizeof(SeqList));    //在调用时必须如申请指针必须开辟内存空间
        int j = 0;
        for(int i = 0; i < 10; i++)
        {
            list->data[i] = i;
            j++;
        }
        list->last = j;
        
        //线性表运算
        Insert_SqList(list, 11, 5);
        //Insert_SqList(&list, 11, 5);
        Delete_SqList(list, 6);
        ElemType e = 0;                                        //局部变量定义时一定要初始化
        e = Get_SqList(list, 5, e);
        //ElemType e = Get_SqList(list, 5, e);                 //另一种表示方法
        
        //线性表数据打印
        for(int i = 0; i < list->last; i++)                    //打印表中的数据
        {
            cout<< list->data[i] << "\t"<<endl;
        }
        cout<<"e = "<<e;
        return 0;
    }

    注1. typedef 解释

    typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。

    在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。

    至于typedef有什么微妙之处,请你接着看下面对几个问题的具体阐述。

    2. typedef & 结构的问题

    当用下面的代码定义一个结构时,编译器报了一个错误,为什么呢?莫非C语言不允许在结构中包含指向它自己的指针吗?请你先猜想一下,然后看下文说明:

    typedef struct tagNode
    {
    char* pItem;
    pNode* pNext;
    }pNode;

    分析:

    1、typedef的最简单使用

    typedef long byte_4;

    给已知数据类型long起个新名字,叫byte_4。

    2、 typedef与结构结合使用

    typedef struct tagMyStruct
    {
    int iNum;
    long lLength;
    }MyStruct;

    这语句实际上完成两个操作:

    1) 定义一个新的结构类型

    struct tagMyStruct
    {
    int iNum;
    long lLength;
    };

    分析:tagMyStruct称为“tag”,即“标签”,实际上是一个临时名字,struct关键字和tagMyStruct一起,构成了这个结构类型,不论是否有typedef,这个结构都存在。

    我们可以用struct tagMyStruct varName来定义变量,但要注意,使用tagMyStruct varName来定义变量是不对的,因为struct 和tagMyStruct合在一起才能表示一个结构类型。

    2) typedef为这个新的结构起了一个名字,叫MyStruct。

    typedef struct tagMyStruct MyStruct;

    因此,MyStruct实际上相当于struct tagMyStruct,我们可以使用MyStruct varName来定义变量。

    答案与分析

    C语言当然允许在结构中包含指向它自己的指针,我们可以在建立链表等数据结构的实现上看到无数这样的例子,上述代码的根本问题在于typedef的应用。

    根据我们上面的阐述可以知道:新结构建立的过程中遇到了pNext域的声明,类型是pNode,要知道pNode表示的是类型的新名字,那么在类型本身还没有建立完成的时候,这个类型的新名字也还不存在,也就是说这个时候编译器根本不认识pNode。

    解决这个问题的方法有多种:

    //方法一
    typedef struct tagNode
    {
    char* pItem;
    struct tagNode* pNext;
    }*pNode;
    
    //方法二
    typedef struct tagNode* pNode;
    struct tagNode
    {
    char* pItem;
    pNode pNext;                      //这边不用pNode* ,pNode 已经表示了struct tagNode*
    };
    
    //方法三,规范做法
    struct tagNode
    {
    char* pItem;
    struct tagNode* pNext;
    };
    typedef struct tagNode* pNode;

    注2. 链表知识点总结

    https://blog.csdn.net/qq_41291253/article/details/89218736

    更多相关内容
  • 直接向分区中插入数据 create table score3 like score; insert into table score3 partition(month ='201807') values ('001','002','100'); 通过查询插入数据 通过load方式加载数据 load data local inpath '...

    直接向分区表中插入数据

    create table score3 like score;
    
    insert into table score3 partition(month ='201807')
     values ('001','002','100');
    

    通过查询插入数据

    通过load方式加载数据

    load data local inpath '/export/servers/hivedatas/score.csv' 
    overwrite into table score partition(month='201806');
    

    通过查询方式加载数据

    create table score4 like score;
    insert overwrite table score4 partition(month = '201806') 
    select s_id,c_id,s_score from score;
    

    注: 关键字overwrite 必须要有

    多插入模式

    常用于实际生产环境当中,将一张表拆开成两部分或者多部分
    给score表加载数据

    load data local inpath '/export/servers/hivedatas/score.csv' 
    overwrite into table score partition(month='201806');
    

    创建第一部分表:

    create table score_first( s_id string,c_id  string) 
    partitioned by (month string)
     row format delimited fields terminated by '\t' ;
    

    创建第二部分表:

    create table score_second(c_id string,s_score int) 
    partitioned by (month string) 
    row format delimited fields terminated by '\t';
    

    分别给第一部分与第二部分表加载数据

    from score 
    insert overwrite table score_first partition(month='201806')
    select s_id,c_id 
    insert overwrite table score_second partition(month = '201806')  
    select c_id,s_score;	
    

    在这里插入图片描述

    查询语句中创建表并加载数据(as select)

    将查询的结果保存到一张表当中去

    create table score5 as select * from score;
    

    创建表时通过location指定加载数据路径

    score.cvs

    01	01	80
    01	02	90
    01	03	99
    02	01	70
    02	02	60
    02	03	80
    03	01	80
    03	02	80
    03	03	80
    04	01	50
    04	02	30
    04	03	20
    05	01	76
    05	02	87
    06	01	31
    06	03	34
    07	02	89
    07	03	98
    
    

    1)创建表,并指定在hdfs上的位置

    create external table score6 (s_id string,c_id string,s_score int)
     row format delimited fields terminated by '\t' location '/myscore6';
    

    2)上传数据到hdfs上

    	hdfs dfs -mkdir -p /myscore6
    	hdfs dfs -put score.csv /myscore6;
    

    3)查询数据

    select * from score6;
    
    展开全文
  • 废话不多说,直接上程序 #include <stdio.h> #include #define MaxSize 20 typedef int ElemType; typedef struct ...//为了方便,顺序的第个位置不放值,也就是下标为0的 void CreateList...

    废话不多说,直接上程序

    #include <stdio.h>
    #include <stdlib.h>
    #define MaxSize 20
    typedef int ElemType;

    typedef struct
    {
    int length;
    ElemType data[MaxSize+1];
    }SqList;

    //为了方便,顺序表的第一个位置不放值,也就是下标为0的
    void CreateList(SqList *&L,ElemType a[],int n)
    {
    int i;
    for(i=1;i<=n;i++)
    L->data[i]=a[i];
    L->length=n;
    }
    //初始化顺序表,向系统申请空间
    void InitList(SqList *&L)
    {
    L=(SqList *)malloc(sizeof(SqList));
    L->length =0;
    }
    //在有序表中加入一个数,使得表依然有序
    bool InsertList(SqList *&L,ElemType e)
    {
    if(L->length==MaxSize)
    return false;
    int n=L->length+1;
    L->length++;
    while(n>=2 && edata[n-1])
    L->data[n+1]=L->data[–n];
    L->data[n]=e;
    return true;
    }
    //输出线性表长度和元素
    void ShowList(SqList *L){
    printf(“表长度:%d\n表元素:”,L->length);
    for(int i=1;i<=L->length;i++)
    printf("%d “,L->data[i]);
    printf(”\n\n");
    }

    void main()
    {
    SqList *L;
    ElemType a[]={0,2,4,6,8,10,12,14};//第一个值0不用
    ElemType e=20; //修改e的值可以测试不同的插入位置
    InitList(L); //初始化顺序表
    CreateList(L,a,7); //给顺序表初始值
    ShowList(L); //输出顺序表信息
    InsertList(L,e); //插入元素
    ShowList(L); //输出顺序表信息
    }

    初始数据我们给了:2 4 6 8 10 12 14

    (1)先测试一下插入表头,插入1,修改e=1

    在这里插入图片描述

    (2)插入表中,e=5
    在这里插入图片描述
    (3)插入表尾,e=20
    在这里插入图片描述

    说明:
    (1)其实想要在有序表里插入数据,一般的思路特别简单:
    ①比较即将插入的数与原来表中的数的大小,找到插入位置(一个循环)。
    ②顺序表长度+1,把要插入的位置的书以及之后的数全部后移(两个循环)。
    ③在插入位置插入数据。
    所以一般的思路需要有两个循环才能完成这个程序。
    (2)本文中的程序只需一个循环即可,方便快捷,具体思路见程序即可。

    **注:本程序在VC++6.0程序中成功运行,其他编程平台请自行尝试。

    展开全文
  • word2013图表题:将图-1改为图1-1

    万次阅读 2020-02-27 13:45:15
    引用链接:https://blog.csdn.net/buaazt/article/details/70257619?depth_1-utm_source=distribute.pc_relevant.none-task&...学位论文大多要求章标题编号用汉字形式,如“第章”、“第二章”,图...

    引用链接:https://blog.csdn.net/buaazt/article/details/70257619?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

    问题描述:

    学位论文大多要求章标题编号用汉字形式,如“第一章”、“第二章”,图表编号中要包含数字形式的章节号,如“图1-1”,“图2-1”。
    ————————————————————————————————

    方法一:域的使用

    大部分写论文时采用章标题用自动编号,图表手动编号的方式来应对这一问题。但这样在插入或删除图表时编号的维护就成为一个大问题。我们依然试图使用优雅的“题注+交叉引用”的形式对图表进行编号和引用。这种方法比较通用,但要用到“域”的概念。

    具体方法,参考如下链接:(很详细,图文结合介绍很清晰)

    https://blog.csdn.net/buaazt/article/details/70257619?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

    方法二:格式编辑软件

     采用一些论文格式编辑的软件。

    方法三:隐藏引用标题法(相对简单)

    具体方法详见:https://baijiahao.baidu.com/s?id=1622095222149965158&wfr=spider&for=pc

    步骤一 新建一个文档,依次单击【开始】选项卡-【段落】组的【多级列表】按钮,在下拉菜单中单击【定义新的多级列表】命令,弹出【定义新多级列表】对话框,单击左侧的级别【1】,将其编号样式设为【一,二,三(简)...】,设置级别“1”与“标题1”链接,在【输入编号的格式】文本框内加上其他字,如“第”,“章”(也可以不加)。

     

    步骤二 单击级别【2】,设置级别“2”与“标题2”链接,清空【输入编号的格式】文本框中的内容,在【包含的级别编号来自】下拉列表中选择【级别1】,勾选【正规形式编号】复选框,单击【确定】按钮。

     

    步骤三 此时文档出现“第一章”字样,录入完标题文字(或先录标题文本,在【样式】任务窗格中选择应用“第一章 标题1”样式),接着按下<Ctrl+Alt+Ener>组合键即插入一个样式分隔符,单击任务窗格中的“1标题2”样式,然后回车。

    在这里注意一下:如何找到这个样式分隔符??

    在打开的word中,点击文件-选项-自定义功能区

    在“从下列位置选择命令”中选择“所有命令”

    之后,按照A-Z的排序,找到样式分隔符,并添加到自定义功能区即可。

    最终可以看到样式分隔符:

     

    步骤四 正常录入正文,图,表或公式等,例如选中一个图,依次单击【引用】选项卡-【题注】组的【插入题注】按钮(或直接单击鼠标右键,在快捷菜单中选择【插入题注】命令),在弹出的对话框的【标签】框中录入【图】字,单击【编号】按钮,在弹出的【题注编号】对话框中,勾选【包含章节号】复选框,在【章节起始样式】下拉列表中“标题2”,单击【确定】按钮。

    这里如何给图片添加题注:https://blog.csdn.net/yql_617540298/article/details/100637461 

     

    步骤五 如果再制作“第二章”,“第三章”等标题,按步骤三来操作。

    方法四:手动

    手动虽然耗时,但是也是操作最简单和有作用的方法了。可以在文章全部写完之后,统一进行一次性的手动更改。

    展开全文
  • 本关任务:编写个能打印九九乘法的小程序。 相关知识 为了完成本关任务,你需要掌握:Python 的格式化输出。 Python的格式化输出 使用 % 符号进行格式化输出 使用%符号表示占位符,从而实现格式化输出的方法,...
  • 2020高考分数线(分数线及一分)2020年高考录取工作正在进行,全国各地教育院陆续公布了2020年普通高校招生考试各类别录取控制分数线及一分。详情如下:山东成绩查询地址:http://sdzk.cn/【山东高考】(...
  • 我们在用excel办公软件制作报表的时候,可能需要对表格中的数据按照指定的要求进行四舍入,保留指定的小数位数。excel四舍入怎么设置呢?当然,如果需要处理的数据不多,你可以人工进行四舍入计算,如果需要...
  • :1、此博客借鉴了中国人民大学王珊和萨师煊老师合著的《数据库系统概论(第版)》,高等教育出版社出版。 2、使用的是MYSQL8.0以上的数据库,工具为MySQL Workbench 3、重点解决外键报错问题```Cannot add or ...
  • 1.数据库设计14规则 1. 原始单据与实体之间的关系   可以是对多、多对多的关系。...这里的实体可以理解为基本。明确这种对应关系后,对我们设计录入界面大有好处。   〖例1〗:份员工履
  • SQL创建

    千次阅读 2021-04-28 15:28:41
    登录数据库后–找到名为数据库的文件夹进行右击展开,展开后第个就是创建新数据库 点击后图上图中间区域所示: 1.给数据库添加名称 2.点击确认在左侧区域刷新下,在数据库文件中找到自己创建的 数据库文件 找到后...
  • 如何优化MySQL千万级大,我写了6000字的解读

    万次阅读 多人点赞 2019-10-21 20:03:03
    千万级大如何优化,这是个很有技术含量的问题,通常我们的直觉思维都会跳转到拆分或者数据分区,在此我想做一些补充和梳理,想和大家做一些这方面的经验总结,也欢迎大家提出建议。 从开始脑海里开始也是...
  • 然而,按照Word官方文档教程会发现,生成的题是“图-3”,网络上有多种解决方法。 方法1: 通过修改域的方式,该方法很复杂,就没有尝试。 方法2:将第章、第二章 中的大写 二 换成小写就可以。然后插入题...
  • shiro-02经典权限张表

    万次阅读 2017-12-05 20:36:24
    :  所有shiro使用方法都是围绕springrain项目进行的. 具体的springrain项目demo可以在之前的博客中找到.经典权限张表指的是:  ①用户  ②用户-角色  ③角色  ④角色权限  ⑤权限ER图:  ...
  • (1)只更新中前10条数据(更新为固定值) (2)用的字段值更新另的某字段值 (3)更新前10条数据(更新为另的数据)
  • 控制器是冯·诺依曼计算机大组成部分之。它在计算机中的作用是______。A、只控制主机内部的相更多相关问题某机械加工车间9月份资料:①制度工作日数22个工作日;②工人平均人数86人;③车间班制生产(8小时);...
  • 《编译原理》构造 LR(1) 分析的步骤与例题解析
  • 海湾5000标准汉字码表设备类型.xls

    万次阅读 2021-01-13 16:27:50
    海湾5000标准汉字码表设备类型.xlsA A安1618按1620案1624 吧1641八1643白1655百1657般1667板1669半1675 办1676帮1679棒1684包1692保1703报1708北1717 备1724被1727苯1729本1730泵1735比1740蔽1746 闭1753边1763编...
  • 某班有5名同学,建立个学生的...(:定义个结构体类型,用结构指针作为函数参数) 输入格式: %ld %s %f %f %f 输出格式: %-9ld%-10s%-5.1f%-5.1f%-8.1f%-10.1f%-d\n 输入样例: 201701 zhao 29.8 85.4 65.4 20
  • 要求:请安装Kingbase数据库软件,在数据库软件中创建个自己名字的模式,在该模式下创建学生关系数据、课程、选课表。 插入一些数据,尝试查询、更新、删除 二、相关原理与知识 (完成实验所用到的相关原理...
  • 篇文带你从0到1了解建站及完成CMS系统编写

    万次阅读 多人点赞 2020-10-24 00:48:06
    学习目标 了解搭建一般网站的简便方式 了解最原始一般站点搭建 了解内容管理站点搭建 了解权限设计及完成 ...文章为从0到1了解内容管理系统搭建与编写,由于篇文章内容篇幅过长,文章内容经过压缩,该项目中相
  • .全量表 每天的所有的最新状态的数据。 全量表,有无变化,都要报 每次上报的数据都是所有的数据(变化的+没有变化的) 2020-04-06 mysql对应的user_info 用户id 姓名 年龄 ...
  • :前面文字过多可跳过,直接去下方获取计划记忆力是我们学习能力中十分重要的种能力,无论是学习、工作、生活中处处都能用到,我们每个人都希望自己能够记忆力超群,过目不忘。但现实是,今天记忆的内容如果不...
  • BUUCTF之随便

    千次阅读 2022-04-03 20:34:01
    # 只有个字段,第个string是指字段名,第个string是备注的内容,已经提示了,没有flag 那就回去看一下supersqli这个吧 看一下第个纯数字的,注意纯数字的表名得用`包裹,构建payload inurl?inject=-1';...
  • 将hive中的数据导出到其他任意目录,例如linux本地磁盘,例如hdfs,例如mysql等等 insert导出 1)将查询的结果导出到本地 :第种 insert overwrite local directory '/export/servers/exporthive/a' select * ...
  • 尴尬的第四范式 第范式

    千次阅读 2019-03-14 15:29:11
    元组:中的行就是个元组。 候选码和主码:中可以唯一确定个元组的某个属性(或者属性组)叫候选码。 主码:我们从许多个候选码中挑个就叫主码。(主键) 属性:教科书上解释为:“实体所具有的某特性...
  • MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS (Relational Database Management System:关系数据库管理系统) 应用软件之
  • mysql虚拟

    万次阅读 2018-11-08 19:22:40
    mysql虚拟
  • 本系列文章主要详细介绍本人在使用Word2016写论文过程所用到的各种操作,这些操作都非常的实用,能够大为减少论文排版...这篇博客主要介绍Word中参考文献尾的使用方法,主要包括如何设置参考文献自动编号以及如何...
  • 正交设计法设计测试用例

    千次阅读 2020-03-23 21:35:08
    概念:正交试验设计是研究多因素多水平的种设计方法,它是根据正交性从全面试验中挑选出部分有代表性的点进行试验,这些有代表性的点具备了“均匀分散,齐整可比”的特点,正交试验设计是种基于正交的、高效率...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 164,834
精华内容 65,933
关键字:

五表一注

友情链接: TemplateTrans.rar