《数据结构》学习笔记——数据结构实现基础

这篇博客详细介绍了如何使用C语言实现数据结构的基础知识,包括数组、指针、结构、链表和流程控制。讲解了数组的定义、引用,指针的使用、动态内存分配,以及结构体的定义和操作。同时,阐述了流程控制的基础,如分支控制(if-else、switch)、循环控制(for、while、do-while)以及函数与递归的概念。内容深入浅出,是学习C语言数据结构的良好参考资料。
摘要由CSDN通过智能技术生成

引子

数据结构的处理方法是从这些具体应用中抽象出共性的数据组织与操作方法,进而采用某种具体的程序设计语言实现相应的数据存储与操作。

利用程序设计语言实现抽象类型的方法:

1. 数据存储
	C语言即其他高级语言提供了数据组织的几种基本实现方式,包括数组、链表、结构体等。
	数据的存储方法是与要实现的操作密切相关的。
	没有最好的存储方式,只有最合适的存储方式。

2. 操作实现
	操作的实现需要利用程序设计语言提供的另一个功能,即流程设计功能。
	任何高级程序设计语言都提供了一种的基本流程控制语句,即分支控制语句(如 if-else、switch)和循环控制语句(如 for、while、do-while语句)。
	分支控制结构、循环控制结构加上程序自然的语句顺序执行结果,是实现任何算法流程的基本结构。

模块化程序设计方法以功能块为单位进行程序设计。
模块化的目的是为了降低程序结构的复杂度,使程序设计、调试和维护等操作简单化。
函数是程序设计语言提供的模块化程序设计的基本手段。

数据存储基础

变量是数据存储的基本单位,而变量是有类型的。
C语言定义了几种基本的数据类型:整型、实现(浮点型)、字符型等。
还提供了构造赋值数据类型的手段,如数组、结构、指针等,为有限能力的程序设计语言表达客观世界中多种多样的数据提供了良好的基础。

数组

数组是最基本的构造类型,它是一组相同类型数据的有序集合。
数组中的元素在内存中连续存放,每个元素都属于同一种数据类型,用数组名和下标可以唯一地确定数组元素。
一维数组定义的一般形式为:

类型名  数组名[数组长度]

数组元素的引用要指定下标,形式为:

数组名[下标]

定义数组是,也可以对数组元素赋值。其一般形式为:

类型名  数组名[数组长度]={初值表};

初值表中依次放着数组元素的初值。

C语言支持多维数组,最常见的多维数组是二维数组,主要用于表示二维表和矩阵。
二维数组的定义形式为:

类型名 数组名[行长度][列长度]

引用二维数组的元素要指定2个下标,即行下标和列下标,形式为:

数组名[行下标][列下标]

二维数组的元素在内存中按行有限方式存放,即先存放第0行的元素,再存放第1行的元素……其中每一行的元素再按照列的顺序存放。

数组的应用离不开循环。

数组具有随机存取元素效率较高的优点,即存取第 i 个元素只需常数时间。也就是说,存取A[i]所需时间与下标 i 无关。

类型定义 typedef

用typedef语句来建立已经定义好的数据类型的别名:

typedef 原有类型名  新类型名

利用typedef来建立基本数据类型的别名能够使得程序具有更好的可阅读性和移植性。

指针

使用指针可以对复杂数据进行处理,能对计算机的内存进行分配控制,在函数调用中使用指针还可以返回多个值。

定义指针变量的一般形式为:

类型名  *指针变量名

指针变量用于存放变量的地址。
定义指针变量时,除了指针变量名,还需要说明该指针变量(如P)所指向的内存空间上所存放数据的类型(如 float)。

指针被定义后,必须将指针和一个特定的变量进关联后,才可以使用指针,也就是说,指针变量也要先赋值再使用,当然指针变量被赋的值应该是地址。

1. 指针的基本运算
通过指针访问变量,这些操作由去地址运算符 & 和间接访问运算符 * 完成。
此外,相同类型的指针还能进行赋值和比较。
指针可以同整数进行加、减操作。
两个类型相同的指针也可进行相减操作,表示两个指针之间相隔的变量个数。
两个相同类型指针还可以使用关系运算符比较大小。
2. 指针与数组
在C语言中,数组名本身就是数组的基地址,即第1个元素(下标为0)的地址。<

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
内含资源如下: 1.基本数据结构 1.1.Array ........... 动态数组 1.2.LinkedList ... 链表 1.3.BST .............. 二分搜索树 1.4.MapBST ..... 二分搜索树(用于实现映射) 1.5.AVLTree ...... AVL树 2.接口 2.1.Queue ........... 队列接口 2.2.Stack .............. 栈接口 2.3.Set .................. 集合接口 2.4.Map ............... 映射接口 2.5.Merger .......... 自定义函数接口 2.6.UnionFind ..... 并查集接口 3.高级数据结构 3.1.ArrayQueue .......................... 队列_基于动态数组实现 3.2.LinkedListQueue .................. 队列__基于链表实现 3.3.LoopQueue ........................... 循环队列_基于动态数组实现 3.4.PriorityQueue ....................... 优先队列_基于最大二叉堆实现 3.5.ArrayPriorityQueue ............. 优先队列_基于动态数组实现 3.6.LinkedListPriorityQueue ..... 优先队列_基于链表实现 3.7.ArrayStack ............................. 栈_基于动态数组实现 3.8.LinkedListStack ..................... 栈_基于链表实现 3.9.BSTSet ..................................... 集合_基于二分搜索树实现 3.10.LinkedListSet ....................... 集合_基于链表实现 3.11.BSTMap ................................ 映射_基于二分搜索树实现 3.12.AVLTreeMap ....................... 映射_ 基于AVL树实现 3.13.LinkedListMap .................... 映射_基于链表实现 3.14.MaxHeap ............................. 最大二叉堆 3.15.SegmentTree ...................... 线段树 3.16.Trie ......................................... 字典树 3.17.QuickFind ............................ 并查集_基于数组实现 3.18.QuickUnion ......................... 并查集_基于树思想实现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值