精华内容
下载资源
问答
  • C语言中的数据结构

    2018-03-18 21:33:10
    大部分数据结构的实现都需要借助C语言中的指针和结构体类型   下面,进入今天的重点啦O(∩_∩)O几种常见的数据结构 (1)线性数据结构:元素之间一般存在元素之间存在一对一关系,是最常用的一类数据结构...
    那么,究竟什么是数据结构呢?
    数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合
    大部分数据结构的实现都需要借助C语言中的指针和结构体类型
     
    下面,进入今天的重点啦O(∩_∩)O几种常见的数据结构
    (1)线性数据结构:元素之间一般存在元素之间存在一对一关系,是最常用的一类数据结构,典型的有:数组、栈、队列和线性表
    (2)树形结构:结点间具有层次关系,每一层的一个结点能且只能和上一层的一个结点相关,但同时可以和下一层的多个结点相关,称为“一对多”关系,常见类型有:树、堆
    (3)图形结构:在图形结构中,允许多个结点之间相关,称为“多对多”关系
     
    下面分别对这几种数据结构做一个简单介绍:
    1、线性数据结构:典型的有:数组、栈、队列和线性表
    (1)数组和链表
    a、数组:存放着一组相同类型的数据,需要预先指定数组的长度,有一维数组、二维数组、多维数组等
    b、链表:链表是C语言中一种应用广泛的结构,它采用动态分配内存的形式实现,用一组任意的存储单元存放数据元素链表的,一般为每个元素增设指针域,用来指向后继元素
    c、数组和链表的区别:
    从逻辑结构来看:数组必须事先定义固定的长度,不能适应数据动态地增减的情况;链表动态地进行存储分配,可以适应数据动态地增减的情况,且可以方便地插入、删除数据项(数组中插入、删除数据项时,需要移动其它数据项)
    从内存存储来看:(静态)数组从栈中分配空间(用NEW创建的在堆中), 对于程序员方便快速,但是自由度小;链表从堆中分配空间, 自由度大但是申请管理比较麻烦
    从访问方式来看:数组在内存中是连续存储的,因此,可以利用下标索引进行随机访问;链表是链式存储结构,在访问元素的时候只能通过线性的方式由前到后顺序访问,所以访问效率比数组要低
     
    (2)栈、队列和线性表:可采用顺序存储和链式存储的方法进行存储
    顺序存储:借助数据元素在存储空间中的相对位置来表示元素之间的逻辑关系
    链式存储:借助表示数据元素存储地址的指针表示元素之间的逻辑关系
    a、栈:只允许在序列末端进行操作,栈的操作只能在栈顶进行,一般栈又被称为后进先出或先进后出的线性结构
       顺序栈:采用顺序存储结构的栈称为顺序栈,即需要用一片地址连续的空间来存储栈的元素,顺序栈的类型定义如下:
      
       链栈:采用链式存储结构的栈称为链栈:
        
     
    b、队列:只允许在序列两端进行操作,一般队列也被称为先进先出的线性结构
       循环队列:采用顺序存储结构的队列,需要按队列可能的最大长度分配存储空空,其类型定义如下:
      
      链队列:采用链式存储结构的队列称为链队列,一般需要设置头尾指针只是链表的头尾结点:
      
     
    c、线性表:允许在序列任意位置进行操作,线性表的操作位置不受限制,线性表的操作十分灵活,常用操作包括在任意位置插入和删除,以及查询和修改任意位置的元素
      顺序表:采用顺序存储结构表示的线性表称为顺序表,用一组地址连续的存储单元一次存放线性表的数据元素,即以存储位置相邻表示位序相继的两个元素之间的前驱和后继关系,为了避免移动元素,一般在顺序表的接口定义中只考虑在表尾插入和删除元素,如此实现的顺序表也可称为栈表:
     
     线性表:一般包括单链表、双向链表、循环链表和双向循环链表
     单链表:
      
     双向链表:
       
     线性表两种存储结构的比较:
     顺序表:
     优点:在顺序表中,逻辑中相邻的两个元素在物理位置上也相邻,查找比较方便,存取任一元素的时间复杂度都为O(1)
     缺点:不适合在任意位置插入、删除元素,因为需要移动元素,平均时间复杂度为O(n)
     链表:
     优点:在链接的任意位置插入或删除元素只需修改相应指针,不需要移动元素;按需动态分配,不需要按最大需求预先分配一块连续空空
     缺点:查找不方便,查找某一元素需要从头指针出发沿指针域查找,因此平均时间复杂度为O(n)
     
    2、树形结构:结点间具有层次关系,每一层的一个结点能且只能和上一层的一个结点相关,但同时可以和下一层的多个结点相关,称为“一对多”关系,常见类型有:树、堆
    (1)二叉树:二叉树是一种递归数据结构,是含有n(n>=0)个结点的有限集合,二叉树具有以下特点:
    二叉树可以是空树;二叉树的每个结点都恰好有两棵子树,其中一个或两个可能为空;二叉树中每个结点的左、右子树的位置不能颠倒,若改变两者的位置,就成为另一棵二叉树
     
    (2)完全二叉树:从根起,自上而下,自左而右,给满二叉树的每个结点从1到n连续编号,如果每个结点都与深度为k的满二叉树中编号从1至n的结点一一对应,则称为完全二叉树
    a、采用顺序存储结构:用一维数组存储完全二叉树,结点的编号对于与结点的下标(如根为1,则根的左孩子为2*i=2*1=2,右孩子为2*i+1=2*1+1=2)
       
    b、采用链式存储结构:
    二叉链表:
     
    三叉链表:它的结点比二叉链表多一个指针域parent,用于执行结点的双亲,便于查找双亲结点
     
    两种存储结构比较:对于完全二叉树,采用顺序存储结构既能节省空间,又可利用数组元素的下标值确定结点在二叉树中的位置及结点之间的关系,但采用顺序存储结构存储一般二叉树容易造成空间浪费,链式结构可以克服这个缺点
     
    (3)二叉查找树:二叉查找树又称二叉排序树,或者是一课空二叉树,或者是具有如下特征的二叉树:
    a、若它的左子树不空,则左子树上所有结点的值均小于根结点的值
    b、若它的右子树不空,则右子树上所有结点的值均大于根结点的值
    c、它的左、右子树也分别是二叉查找树
     
    (4)平衡二叉树:平衡二叉查找树简称平衡二叉树,平衡二叉树或者是棵空树,或者是具有下列性质的二叉查找树:它的左子树和右子树都是平衡二叉树,且左子树和右子树的高度之差的绝对值不超过1
     
    平衡二叉树的失衡及调整主要可归纳为下列四种情况:LL型、RR型、LR型、RL型
     
    (5)树:树是含有n(n>=0)个结点的有限集合,在任意一棵非空树种:
    a、有且仅有一个特定的称为根的结点
    b、当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1,T2,...,Tm,其中每一个集合本身又是一棵树,并且T1,T2,...,Tm称为根的子树
     
    (6)堆:堆是具有以下特性的完全二叉树,其所有非叶子结点均不大于(或不小于)其左右孩子结点。若堆中所有非叶子结点均不大于其左右孩子结点,则称为小顶堆(小根堆),若堆中所有非叶子结点均不小于其左右孩子结点,则称为大顶堆(大根堆)
     
     
    (7)并查集:并查集是指由一组不相交子集所构成的集合,记作:S={S1,S2,S3,...,Sn}
    (8)B树
     
    3、图形结构:在图形结构中,允许多个结点之间相关,称为“多对多”关系,可分为有向图和无向图
    展开全文
  • C语言中的数据结构和算法分析:C ++实现《数据结构与算法分享——C语言描述》
  • c语言数据结构和数据类型 C语言中的数据类型 (Data types in C Language) Data types specify how we enter data into our programs and what type of data we enter. C language has some predefined set of data ...

    c语言数据结构和数据类型

    Data types specify how we enter data into our programs and what type of data we enter. C language has some predefined set of data types to handle various kinds of data that we can use in our program. These datatypes have different storage capacities.

    数据类型指定了如何将数据输入到程序中以及输入什么类型的数据。 C语言具有一些预定义的数据类型集,以处理我们可以在程序中使用的各种数据。 这些数据类型具有不同的存储容量。

    C language supports 2 different type of data types:

    C语言支持2种不同类型的数据类型:

    1. Primary data types:

      主要数据类型

      These are fundamental data types in C namely integer(int), floating point(float), character(char) and void.

      这些是C语言中的基本数据类型,即integer( int ),浮点数( float ),character( char )和void

    2. Derived data types:

      派生数据类型

      Derived data types are nothing but primary datatypes but a little twisted or grouped together like array, stucture, union and pointer. These are discussed in details later.

      派生数据类型不过是主要数据类型,而是有点扭曲或组合在一起的数组结构联合指针 。 这些将在后面详细讨论。

    Data type determines the type of data a variable will hold. If a variable x is declared as int. it means x can hold only integer values. Every variable which is used in the program must be declared as what data-type it is.

    数据类型确定变量将保存的数据类型。 如果变量x声明为int 。 这意味着x只能容纳整数值。 程序中使用的每个变量都必须声明为数据类型。

    Primary data types in c

    整数类型 (Integer type)

    Integers are used to store whole numbers.

    整数用于存储整数。

    Size and range of Integer type on 16-bit machine:

    16位计算机上整数类型的大小和范围:

    TypeSize(bytes)Range
    int or signed int2-32,768 to 32767
    unsigned int20 to 65535
    short int or signed short int1-128 to 127
    unsigned short int10 to 255
    long int or signed long int4-2,147,483,648 to 2,147,483,647
    unsigned long int40 to 4,294,967,295
    类型 大小(字节) 范围
    int或signed int 2 -32,768至32767
    无符号整数 2 0至65535
    short int或有符号short int 1个 -128至127
    无符号short int 1个 0至255
    long int或有符号long int 4 -2,147,483,648至2,147,483,647
    无符号长整数 4 0至4,294,967,295

    浮点型 (Floating point type)

    Floating types are used to store real numbers.

    浮点类型用于存储实数。

    Size and range of Integer type on 16-bit machine

    16位计算机上整数类型的大小和范围

    TypeSize(bytes)Range
    Float43.4E-38 to 3.4E+38
    double81.7E-308 to 1.7E+308
    long double103.4E-4932 to 1.1E+4932
    类型 大小(字节) 范围
    浮动 4 3.4E-38至3.4E + 38
    8 1.7E-308至1.7E + 308
    长双 10 3.4E-4932至1.1E + 4932

    角色类型 (Character type)

    Character types are used to store characters value.

    字符类型用于存储字符值。

    Size and range of Integer type on 16-bit machine

    16位计算机上整数类型的大小和范围

    TypeSize(bytes)Range
    char or signed char1-128 to 127
    unsigned char10 to 255
    类型 大小(字节) 范围
    字符或签名字符 1个 -128至127
    无符号的字符 1个 0至255

    空类型 (void type)

    void type means no value. This is usually used to specify the type of functions which returns nothing. We will get acquainted to this datatype as we start learning more advanced topics in C language, like functions, pointers etc.

    void类型表示没有值。 通常用于指定不返回任何内容的函数类型。 当我们开始学习C语言中更高级的主题(例如函数,指针等)时,我们将熟悉此数据类型。

    翻译自: https://www.studytonight.com/c/datatype-in-c.php

    c语言数据结构和数据类型

    展开全文
  • 自己用c语言来实现数据结构中的栈,详细的介绍了栈的结构
  • C语言中的初等数据结构

    热门讨论 2016-10-05 11:29:26
    C语言中的初等数据结构16340115 数据科学与计算机学院目录 什么是数据结构 C语言中有哪些初等的数据结构 什么是数据结构 数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的...

    C语言中的初等数据结构


    16340115
    数据科学与计算机学院


    目录

    1. 什么是数据结构
    2. C语言中有哪些初等的数据结构
    3. 数组
    4. 链表
    5. 队列

    什么是数据结构

    数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合和该集合中数据元素之间的关系组成。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。(引用自百度百科)

    C语言中有哪些初等的数据结构

    1. 数组

    数组是对类似对象的系统排列,在内存上有一块连续存储空间。

    2.链表

    链表(Linked list)(台湾称为连结串列)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer)。

    链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。(来自百度百科)

    3.栈

    栈是一种后进先出的数据结构,可以用数组也可用链表实现

    4.队列

    队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。

    数组

    数组是非常基本的数据结构,数组的随机访问很方便。

    但数组也有其固有的限制,大小分配后不能改变,因为保存的数据的个数在分配内存的时候就是确定的。按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。
    int a[10]; 说明整型数组a,有10个元素。
    float b[10],c[20]; 说明实型数组b,有10个元素,实型数组c,有20个元素。
    char ch[20]; 说明字符数组ch,有20个元素

    链表

    链表不需要提前分配固定大小存储空间,当需要存储数据的时候分配一块内存并将这块内存插入链表中。
    struct example
    {
    int content;
    struct example* next;
    }

    此处定义了一个结构体节点,它拥有指向下个节点的指针next。content用于存储数据而next指向下一个数据。

    此处h为头节点。对链表操作时,只能按顺序进行写入、读取或者删除。查看详情
    除了基础的单链表,还有双链表,循环链表等。

    栈可以看作是一种特殊的链表。但它拥有FILO1的性质。对栈的操作只能在栈顶发生。最先写入的数据只能在最后读出来。
    举例:

    #include <stdio.h>
    #include <malloc.h>
    #define DataType int
    #define MAXSIZE 1024
    
    typedef struct
    {
        DataType data[MAXSIZE];
        int top;
    }SeqStack;
    
    SeqStack* Init_SeqStack()//栈初始化
    {
        SeqStack*s;
        s=(SeqStack*)malloc(sizeof(SeqStack));
        if(!s)
        {
            printf("空间不足\n");
            return NULL;
        }
        else
        {
            s->top=-1;
            returns;
        }
    }
    
    int Empty_SeqStack(SeqStack* s)//判栈空
    {
        if(s->top==-1)
            return 1;
        else
            return 0;
    }
    
    int Push_SeqStack(SeqStack* s,DataType x)//入栈
    {
        if(s->top==MAXSIZE-1)
            return 0;//栈满不能入栈
        else
        {
            s->top++;
            s->data[s->top]=x;
            return 1;
        }
    }
    
    int Pop_SeqStack(SeqStack* s,DataType* x)//出栈
    {
        if(Empty_SeqStack(s))
            return 0;//栈空不能出栈
        else
        {
            *x=s->data[s->top];
            s->top--;
            return 1;
        }//栈顶元素存入*x,返回
    }
    
    DataType Top_SeqStack(SeqStack* s)//取栈顶元素
    {
        if(Empty_SeqStack(s))
            return 0;//栈空
        else
            return s->data[s->top];
    }
    int Print_SeqStack(SeqStack* s)
    {
        int i;
        printf("当前栈中的元素:\n");
        for(i=s->top;i>=0;i--)
            printf("%3d",s->data[i]);
        printf("\n");
        return 0;
    }
    
    int main()
    {
        SeqStack* L;
        int n,num,m;
        int i;
        L=Init_SeqStack();
        printf("初始化完成\n");
        printf("栈空:%d\n",Empty_SeqStack(L));
        printf("请输入入栈元素个数:\n");
        scanf("%d",&n);
        printf("请输入要入栈的%d个元素:\n",n);
        for(i=0;i<n;i++)
        {
            scanf("%d",&num);
            Push_SeqStack(L,num);
        }
        Print_SeqStack(L);
        printf("栈顶元素:%d\n",Top_SeqStack(L));
        printf("请输入要出栈的元素个数(不能超过%d个):\n",n);
        scanf("%d",&n);
        printf("依次出栈的%d个元素:\n",n);
        for(i=0;i<n;i++)
        {
            Pop_SeqStack(L,&m);
            printf("%3d",m);
        }
        printf("\n");
        Print_SeqStack(L);
        printf("栈顶元素:%d\n",Top_SeqStack(L));
        return 0;
    }

    队列

    队列与栈相似,区别是它拥有FIFO2的性质。如图:实际操作与链表、栈相似。
    下面是循环队列元素个数计算公式:队列头指针为front,队列尾指针为rear,队列容量为M,则元素个数

    x=M(|rearfront+M|M|rearfront+M|M)x=M⋅(|rear−front+M|M−⌊|rear−front+M|M⌋)

    博客小白,编程菜鸟,如有雷同,纯属偶然,若有错误,请多指正。
    参考:
    1.http://www.cnblogs.com/tpys/p/3568528.html

    附送一只皮卡丘:


    1. first in last out
    2. first in first out,最先写入的数据最先读出
    展开全文
  • 数据结构 C语言版期末题库 数据结构期末考试试题 一单选题 (每小题 2 分共 12 分) 1在一个单链表 HL 若要向表头插入一个由指针 p 指向结点则执行 ( ) A HL ps p 一 >next HL B p 一 >next HL HL p3 C p 一 >next...
  • C语言提供的数据结构,是以数据类型形式出现的。具体分类如下: 1.基本类型 分为整型、实型(又称浮点型)、字符型和枚举型四种。...C语言中的数据,有常量和变量之分,它们分别属于上述这些类型 ...

    C语言提供的数据结构,是以数据类型形式出现的。具体分类如下:
    1.基本类型
    分为整型、实型(又称浮点型)、字符型和枚举型四种。
    2.构造类型
    分为数组类型、结构类型和共用类型三种。
    3.指针类型。
    4.空类型
    C语言中的数据,有常量和变量之分,它们分别属于上述这些类型

    展开全文
  • 具体情况是出现了一个问题,导致程序停止正常工作,如果有可用解决方案,Windiws将关闭程序并通知你![图片](https://img-ask.csdn.net/upload/201512/13/1449979113_441162.jpg)![图片]...
  • c语言来实现数据结构中的队列,详细的表达了队列的结构
  • 本文和大家分享的主要是c语言数据结构栈的相关...具有先进后出的特点,下面看的就是这些抽象的数据结构怎么用C语言代码来实现,栈能实现,那么其他的数据结构也就自然可以用C语言实现的了,如:队列。  C语言
  • 基于C语言的通用数据结构和算法库

    千次阅读 2015-07-02 12:04:34
    本人最近在学习数据结构的...C语言没有像C++那样的STL库,语言本身并不是一种真正意义上的高级语言,实现项目中真正用到的算法中的C语言的数据结构也很少,要么是按照自己的需求来实现,要么一般都用C++来完成大型的项
  • c语言中的节点 链条是什么意思??????????????????
  • 数据结构中的C语言实现 数据结构中的C语言实现 数据结构中的C语言实现
  • 首先讲下字符还有字符串区别,在C语言中是没有字符串 ,只有在特殊情况下才会表现,可以用数组,还有指针表示,在C语言中字符表示是用单引号表示方法,例如 char i=‘A’,这种事字符串表示方法,在字符...
  • C语言数据结构

    2015-09-26 10:06:39
    3)C语言数据类型丰富,具有现代语言的各种数据类型,用户还能扩充它,实现各种复杂的数据结构,完成各种问题的数据描述。 4)C语言是一种结构化程序设计语言,层次清晰,便于按模块化方式组织程序,易于调试和维护。C...
  • C语言实现通用数据结构的高效设计

    千次阅读 2014-10-31 16:14:36
    以简单插入排序为例,说明如何在C语言中实现对任意数据类型支持,同时模拟C++模板,在代码大小和运行效率上取得平衡。
  • 数据结构中BiTree的C语言实现 数据结构中BiTree的C语言实现
  • 数据结构中矩阵的C语言实现 数据结构中矩阵的C语言实现
  • C语言基础——数据结构

    千次阅读 多人点赞 2018-02-02 19:54:26
    线性表 线性表的定义  定义n个数据元素的有限序列,记作(a1, a2, …, an)ai 是表中数据元素,n 是表长度 线性表的特点 ...定义 将线性表中的元素相继存放在一个连续的存储空间中。  可利用一维
  • c语言实现基本数据结构(栈) 准备用c语言将所有基本数据结构实现一遍,从栈开始。 下面是int类型栈,结构体如下 typedef struct{ int top; int n; int *s; }Stack; 方法 void init_stack(Stack *...
  • 对于很多初学c语言的同学·,虽然都能理解数据结构中的思想,但是不一定能用c一行一行撸出一个完整的代码,我最近也正好在重新看数据结构,所以就把c语言实现数据结构源代码放出来帮助初学者。
  • c语言实现基本数据结构(图)

    千次阅读 2019-03-08 11:43:12
    图是基本的数据结构中比较复杂的了,相对于链表一类来说。因为忘了不少,于是参考了一下书上的代码。 (ps:感觉第一个难点是不知道怎么命名变量名…… ╮(╯▽╰)╭ ) 图的表示方法有四种, 分别是 邻接矩阵表示法 ...
  • C语言数据结构

    千次阅读 2020-12-20 13:28:41
    C语言数据结构 文章目录C语言数据结构1.图0.图定义1.图储存结构1.1邻阶矩阵(无向图)1.2邻阶矩阵(有向图)1.3邻接矩阵(网)1.4邻接表(无向图)1.5邻接表(有向图)1.6邻接表(网)2.图遍历2.1深度优先遍历2.2广度优先...
  • /*顶点中的数据信息*/ ArcNode *firstarc; /*指向单链表,即指向第一条边*/ }VNode; int visited[5]={0,0,0,0,0}; CreatGraph(int n , VNode G[] ){ int i,e; ArcNode *p , *q; printf("Input the information...
  • 数据结构实验:文学研究助手【C语言实现】 实验内容 文学研究人员需要统计某篇英语小说某些特定单词出现次数和位置。设计一个实现此目标文字统计系统。 英文小说存放于一文本文件,待统计词汇集合要一次...
  • 数据结构中十字链表的C语言实现 数据结构中十字链表的C语言实现
  • 考虑下编程的过程:对于一个真实的问题,编程解决步骤往往是:第一步分析问题,第二步找到数学方法“纸面上”解决它,也就是找到“算法”,第三步选择合适的数据结构存放数据,实现“算法”,第四步选择编程语言
  • c语言数据结构中链表与顺序表基本操作

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 17,081
精华内容 6,832
关键字:

c语言中的数据结构

c语言 订阅
数据结构 订阅