这篇文章我写的目的是将我学习过程中觉得疑惑的地方用通俗的语言来描述,我写下来的东西是我觉得比较难以理解或者重要的东西,不喜勿喷!大佬路过也请看看, 帮我纠正一些错误!谢谢
下面做一些介绍吧:2019.3.30 本人现在是大一,过完这个学期就大二了,提前学习数据结构,因为我大一上过学期就开始自学C了,用的是C Primer Plus, 前16章的代码全都码了,到17章感觉有点看不懂,因为这本书不单单有C语法内容,还夹杂了一些数据结构的内容,到17章特别明显,于是我干脆粗略的看了链表之后直接去学习数据结构,我现在用的是浙江大学何钦铭的《数据结构》和《数据结构与算法分析》这两本书以及看mooc,但这篇文章会主要以何钦铭老师的书为主。!
我就直接跳过书本的前两章了,直接第三章了,别怪我咯,我也懒= =!
首先是线性表
线性表是由同一类型的数据元素构成的有序序列的线型结构
![56ec821d820db326b75909519fbf9e0e.png](https://i-blog.csdnimg.cn/blog_migrate/219b6dfd6d3112be3359b6a8564f3b60.jpeg)
将概念和图结合起来看,每一个小方格代表一个元素,元素的种类是相同的,书上以及mooc是以同一类型的结构为例子,所以之后也是以结构为例子,即每一个小方格代表一个结构,而这些小方格(结构)按照顺序排列的集合就是一个线性表。
线性表的顺序存储实现
线性表的顺序存储是指在内存中用地址连续的一块存储空间顺序存放线性表的各元素。
我们知道数组是连续存放的,所以这里用数组来表示顺序存储的数据区域非常合适
一些看书不仔细的同学也许会疑惑,书中是以结构来作为顺序表的元素丫!书中是为了体现数据结构的整体性(这句话我也看不懂 = =!),将数组和变量Last(last表示记录当前线性表中最后一个元素在数组中的位置)封装成一个结构作为顺序表的类型。
typedef
至于相应的主要操作:初始化、查找以及插入,就自己去看书吧!
线性表的链式存储结构
和顺序存储结构差不都,不同之处就是把数组换成链表了,相应的概念自己看书去,相信你能看懂。
堆栈
堆栈也是一个线性表,那么它就有两种实现方式 ,其一顺序存储方式,其二链式存储方式
建议先自己去看下书本或者去听mooc,再来看之后的内容,
顺序存储方式,用C语言描述顺序栈类型Stack如下:
typedef int Position;
typedef struct SNode *PtrToSNode;
struct SNode{
ElementType *Data; //定义了存储元素的数组
Position TOP; //栈顶指针
int MaxSize; //堆栈的最大容量
}
创建一个给定容量的空堆栈函数
Stack CreateStack(int MaxSize)
{
Stack S = (Stack) malloc (sizeof(struct SNode));
S->Data = (ElementType*)malloc(MaxSize * sizeof(ElementType));
S->Top = -1;
S->MaxSize = MaxSize;
return S;
}
入栈操作push