精华内容
下载资源
问答
  • 自己边看数据结构边总结出来,方便以后自己查看

    1、顺序存储结构(如数组)

    定义:

    #define MAXSIZE 20
    typedef struct{
    	int data[MAXSIZE]; //假设这里是整型
    	int length;  //线性表长度
    };

    读取其中某个元素:假设线性顺序表已存在,读取其中第i个元素,其值返回到e中

    #define ERROR 0
    #define OK 1   //定义返回状态
    int GetElem(Squlist L, int i, int *e){
    	if (L.length == 0 || i<1 || i>L.length)  //该元素不存在或者超出表范围或者表为空则读取失败
    		return ERROR;
    	*e = L.data[i - 1];
    	return OK;  //读取成功
    };
    插入操作:在第i个元素前面插入元素e

    int ListInsert(Squlist *L, int i, int e){
    	int k;
    	if (L->length == MAXSIZE) //表格是否满
    		return ERROR;
    	if (i<1 ||i>length+1)  //插入i不在范围内
    		return ERROR;
    	if (i <= L->length)
    	{
    		for (k = length - 1; k >= i - 1; k--) 
    			L->data[k + 1] = L->data[k];
    	}
    	   L->data[i] = e;
               length++;
    	   return OK;
    	
    };
    删除操作:删除第i个元素并返回其值e

    int ListDelete(Squlist *L, int i, int *e){
    	int k;
    	if (L->length == 0)      //表格为空
    		return ERROR;
    	if (i<1 || i>L->length)  //删除位置不正确
    		return ERROR;
    	if (i <= L->length){
    		*e = L->data[i - 1];
    		for (k = i; k < L->length - 1;k++)
    			L->data[i - 1] = L->data[i];
    		L->length--;
    		return OK;
    	}
    
    }

    总结特点:查询元素方便(时间复杂度O(1)),插入和删除元素复杂(时间复杂度O(n))


    2、链式存储结构(链表)
    单链表的定义:

    typedef struct Node {         //定义链表中的节点
    	int data; //假设数据为整型
    	struct Node *next;
    };
    typedef struct Node  *Linklist;  //定义一个链表类型的指针
    链表读取:读取第i个数,其值返回e中

    #define ERROR 0;
    #define OK  1;
    int GetElem(Linklist L, int i, int *e){
    	int j=1;
    	Linklist p;
    	p = L->next;   //表示p指向了L->next,理解这点很重要
    	while (p && j < 1){
    		p = p->next;
    		j++;
    	}
    	if (!p || j > i)
    		return ERROR; 
    	&e = p->data;
    	return OK;
    }

    链表整表创建:头插法

    void CreatLinklist(Linklist L, int n){
    	Linklist p;
    	int i;
    	srand(time(0)); //初始化随机数种子
    	L = (Linklist)malloc(sizeof(Node));
    	L->next = NULL;     //建立带头结点的链表
    	for (i = 0; i < n; i++){
    		p = (Linklist)malloc(sizeof(Node));
    		p->data = rand() % 100 + 1;//随机生成100以内的数字
    		p->next = L->next;
    		(->next = p;       //插入到表头
    	}	
    }
    链表的插入:在第i个元素前面插入元素e

    int LinklistInsert(LinkList L, int i, int e){
    	int j;
    	Linklist s, p;
    	p = L;
    	while (p && j < i){     //先找到插入的位置
    		p = p->next;
    		j++;
    	}
    	if (!p || j > i)
    		return ERROR;
    	s = (Linklist)malloc(sizeof(Node));
    	s->data = e;
    	s->next = p->next;     //插入链表s到p的后继
    	p->next = s;
    	return OK;
    }

    链表的删除:删除第i个元素,返回其值到e中

    int LinklistDelete(Linklist L, inti, int *e){
    	int j = 1;
    	Linklist p, q;
    	p = L;
    	while (p && j < i){
    		p = p->next;
    		j++;
    	}
    	if (!(p->next) || j > i)
    		return ERROR;
    	q = p->next;
    	p->next = q->next;     //将q的后继赋值给p
    	*e = q->data;
    	free(q);              //系统回收此节点,释放内存
    	return OK;
    }
    整个链表的删除:

    int CleatLinklist(Linklist L){
    	Linklist p, q;
    	p = L->next;
    	while (p){
    		q = p->next;
    		free(q);
    		p=q
    	}
    	L->next = NULL;    //头结点指针域为空
    	return OK;
    }


    总结链表的特点,可以看到每次读取一个数的时候,都要从表头一直读下去,复杂度为O(n),但是插入和删除时,找到特定位置后,再执行的时间复杂度为O(1)

    3、循环链表

    把单链表的终端节点指针域指向头结点,就形成了循环链表,可方便进行链表全部结点的遍历。判断的方法就是看p->next是否为头结点来结束循环


    4、双向链表

    和单向链表区别仅在于多了一个prior指针指向前面的结点,因此插入和删除操作也就多了几个关于prior的步骤

    定义

    typedef struct Node {         //定义链表中的节点
    	int data; //假设数据为整型
    	struct Node *next;
    	struct Node *prior;
    };

    单链表翻转

    思路是每次翻转链表,把原始链表的第一个元素后面的那个元素放到表头

    LinkList ReverseLinkedList(LinkList L)
    {
        Node   *first = NULL;  //指向原始链表最开始的第一个数据
        Node   *behind = NULL; //每次新生成链表时,指向原始链表最开始的第一个数据的下一个数据
     
        if (L == NULL)
        {
            return NULL;
        }
        first = L->next;
        while (first->next != NULL)
        {
            behind = first->next;
            first->next = behind->next;
            behind->next = L->next;
            L->next = behind;
        }
        return L;
    }








    展开全文
  • 数据结构类型定义

    千次阅读 2018-06-10 10:25:05
    //元素类型 typedef struct node {ElemType data; struct node *next; }LNode,*LinkList; 栈 #define MAX 100 //栈的最大值 typedef struct { ElemType base[MAX]; int top; }SqStack; 队列 ...

    线性表:

    typedef int  ElemType;//元素类型
    typedef  struct node
    {ElemType data;
    struct node *next;
    }LNode,*LinkList;

    #define MAX 100 //栈的最大值
    typedef struct 
    {  ElemType base[MAX];
    int top;
    }SqStack; 

    队列

    #define MAX 100 //队列的最大长度
    typedef struct 
    {  ElemType base[MAX];
    int front,rear;
    }SqQueue; 

    二叉树

    typedef char ElemType; //元素类型
    typedef struct Node
    {  ElemType data;
    struct Node *lchild,*rchild;
    }BTNode,*BiTree;

    #define MAXVNUM  10  //顶点最大个数
    typedef struct Node
    {   int   adjvex;
    struct Node *nextarc;
     int weight; //边的权
    }ArcNode;  //表结点
    #define VertexType int //顶点元素类型
    typedef struct 
    { int degree,indegree;//顶点的度,入度
    VertexType data;
    ArcNode *firstarc;
    }VNode/*头结点*/typedef struct{
          VNode vertices[MAXVNUM];
    int vexnum,arcnum;//顶点的实际数,边的实际数
     }ALGraph;  

    查找

    #define N 30
    typedef struct node
    { char name[20];
    struct node *next;
    }NODE;
    NODE *HashTable[N];

    排序

    #define MAXSIZE 100 /*参加排序元素的最大个数*/
    typedef struct list
    {   char name[20];
    float score;
    }STU;
    STU r[MAXSIZE+1];//下标0不用
    展开全文
  • 数据结构--结点数据类型定义

    千次阅读 2019-12-02 16:19:33
    本篇主要讲述数据结构的基本知识(有关结点定义部分) 建议大家在学习数据结构之前先了解一下结构体和指针的基础知识再来学习数据结构 #include<stdio.h> typedef struct Node { int data;//数据域 ...

    本篇主要讲述数据结构的基本知识(有关结点定义部分)
    建议大家在学习数据结构之前先了解一下结构体和指针的基础知识再来学习数据结构

    #include<stdio.h>
    
    typedef struct Node
    {
    	int data;//数据域 
    	struct Node * pNext;//指针域指向和它本身一样的另外一个结构体,另外一个 
    	 							      节点  所以是struct Node 
    }NODE,*PNODE;	//NODE等价于struct Node,PNODE等价于struct Node*
    								//此时相当于造出了每个结点的数据类型 
    int main(void)
    {
    	return 0;
    }
    
    展开全文
  • 常用数据结构类型定义

    千次阅读 2011-08-25 19:20:56
    数组 (Array)  在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来。...一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型

    数组 (Array)

      在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。在C语言中, 数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。

    栈 (Stack)

      是只能在某一端插入和删除的特殊线性表。它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。

    队列 (Queue)

      一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。

    链表 (Linked List)

      是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。

    树 (Tree)

      是包含n(n>0)个结点的有穷集合K,且在K中定义了一个关系N,N满足 以下条件:  (1)有且仅有一个结点 k0,他对于关系N来说没有前驱,称K0为树的根结点。简称为根(root)。 (2)除K0外,k中的每个结点,对于关系N来说有且仅有一个前驱。  (3)K中各结点,对关系N来说可以有m个后继(m>=0)。

    图 (Graph)

      图是由结点的有穷集合V和边的集合E组成。其中,为了与树形结构加以区别,在图结构中常常将结点称为顶点,边是顶点的有序偶对,若两个顶点之间存在一条边,就表示这两个顶点具有相邻关系。

    堆 (Heap)

      在计算机科学中,堆是一种特殊的树形数据结构,每个结点都有一个值。通常我们所说的堆的数据结构,是指二叉堆。堆的特点是根结点的值最小(或最大),且根结点的两个子树也是一个堆。

    散列表 (Hash)

      若结构中存在关键字和K相等的记录,则必定在f(K)的存储位置上。由此,不需比较便可直接取得所查记录。称这个对应关系f为散列函数(Hash function),按这个思想建立的表为散列表
    展开全文
  • 数据结构:八大数据结构分类

    万次阅读 多人点赞 2018-09-05 18:23:28
    数据结构分类 数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成 。 常用的数据结构有:数组,栈,链表,队列,树,图,堆,散列表等,如图所示: 每一种数据结构都...
  • 数据结构定义

    千次阅读 2011-11-29 12:29:34
     顺序存储的结构类型: typedef struct { ElemType data[MaxSize]; int length; } 链式存储的结构类型:  单链表: typedef struct Node { ElemType data; struct Node * next; }LinkList;//头结点类型...
  • 一、数据、数据元素、数据对象、数据结构定义 1、数据的定义 定义一:数据是客观事物的符号表示。 学号 姓名 语文 数学 C语言 6201001 张三 85 54 ...
  • 二叉树的数据结构定义

    千次阅读 2017-08-13 11:10:50
    //二叉树的数据结构定义 typedef struct BiTNode{ int data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree;
  • 数据结构-结构类型

    千次阅读 2018-07-27 21:22:02
    从事计算机,想要深入学习,不得不...也就是说,数据结构就是按照逻辑关系组织起来的一批数据,此处的数据定义为一个运算的集合,是按一定存储方式将其存在计算机中,而结构就是实体+关系。计算机应用系统中的两个...
  • 1、串是由一个或多个字符组成的有序数列,又叫字符串。 2、空格串是只包含空格的串,有长度有内容,而且可以不止一个空格。 3、子串与主串,串中任意个数的连续字符组成的子序列称为该串的子串,相应的包含子串的...
  • Numpy--结构数据类型定义和操作

    千次阅读 2018-09-03 16:14:10
    C++/C 这样定义一个结构体类型,里面又许多不同的数据: struct node{ int age; string name; bool sex; }; Python: numpy.dtype(object, align, copy) ...
  • 数据结构、数据类型、抽象数据类型之间的区别

    千次阅读 多人点赞 2019-11-03 20:15:37
    数据结构:是相互之间存在一种或多种特定关系的数据元素的集合,包括逻辑结构和物理结构。(数据元素是最基本的数据单位,最基本的数据元素是一个二进制位。) 逻辑结构指反映数据元素之间的逻辑关系的数据结构,...
  • 数据结构定义和研究的内容

    千次阅读 2016-08-28 18:21:52
    按照某种逻辑关系组织起来的一批数据,用一定的存储方式存储在计算机的存储器中,并在这些数据上定义一个运算的集合,就成为一个数据结构数据结构研究的内容如下: (1)数据的逻辑结构:按照某种逻辑关系将...
  • 复数数据结构定义和实现

    千次阅读 2017-12-29 22:17:20
    (1)复数抽象数据类型描述: ADT Complex { 数据对象:D = {c1, c2 | c1, c2 ΠR(R为实数集)} 数据关系:S = { ( c1为实部,c2为虚部)} 基本操作: Assign(&A, c1, c2) Add(&A, B) Minus(&A, B) Multiply(&A,...
  • 数据结构

    万次阅读 2018-02-07 00:47:38
    1. 什么是数据结构算法+数据结构=程序设计 数据结构是由数据和结构两方面组成,下面举一个例子可以让大家很快地理解数据结构:比如我们实验楼的课程管理系统,每一门课程由课程号、课程名、类别、作者等组成,每门...
  • STM32 数据类型定义

    千次阅读 2016-10-08 10:29:48
    unsigned int 8、uint8_t 、u8等三种数据变量定义方式均表示——无符号的8位整形数据。 volatile作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值。
  • 抽象数据类型定义(ADT)

    万次阅读 多人点赞 2014-03-16 16:03:56
    一、抽象数据类型定义(ADT) 作用:抽象数据类型可以使我们更容易描述现实世界。例:用线性表描述学生成绩表,用树或图描述遗传关系。 定义:一个数学模型以及定义在该模型上的一组操作。 关键:使用它的人...
  • 数据类型数据结构的区别

    千次阅读 2020-07-27 18:01:50
    数据结构是指按一定的逻辑结构组成的一批数据,使用某种存储结构将这批数据存储于计算机中,并在这些数据上定义了一个运算集合。 1. 逻辑结构 常见的数据的逻辑结构:线性结构、树形结构和图形结构。 2. 存储结构 ...
  • 在学习数据结构类型时,首先遇到的一个难点即是如何理解抽象数据结构类型。通过阅读多个博客,将个人理解总结如下: 如已看过抽象数据类型定义,可直接跳过定义。 抽象数据类似的定义 抽象数据类型(Abstract Data ...
  • C语言各种数据结构定义总结

    千次阅读 2018-02-07 19:38:13
    1.栈(先进后出)-顺序结构  typedef int DataType; 21 22 typedef struct 23 { 24 DataType data[MAX]; 25 int top; 26 }Stack; 27 28 Status InitStack(Stack *S) 29 { 30 S->top = -1; 31 re
  • 数据结构-抽象数据类型

    千次阅读 2017-12-19 14:19:27
    抽象数据类型定义可以由一种数据结构定义在其上的一组操作组成,数据结构又包括数据元素以及元素之间的关系。因此抽象数据元素类型一般由元素、关系及操作三种元素来定义。(D,R,P) D 是数据对象、R是D上的...
  • 数据结构(结构体定义,typedef)

    千次阅读 2014-04-14 23:06:18
    数据结构(结构体定义,typedef) 时间2014-03-24 00:22:39 CSDN博客 原文 http://blog.csdn.net/leonard_it/article/details/21897709 看了郝斌老师的数据结构,很有感触,所以就想写一个系列关于...
  • 如何理解数据结构中的抽象数据类型

    万次阅读 多人点赞 2018-09-04 18:49:23
    抽象数据类型的标准格式 ADT 抽象数据类型名 { Data: 数据元素之间逻辑关系的定义;...抽象数据类型定义仅仅取决于它的一组逻辑特性,而与它在计算机中的表示和实现无关。 例如,int类型数据表示的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,403,060
精华内容 561,224
关键字:

数据结构类型定义

数据结构 订阅