数据结构知识汇总1:线性表,栈和队列

线性表是零个或者多个数据元素的有限序列。线性表中的元素必须是类型相同的。

线性表的顺序存储结构:用一段地址连续的存储单元依次存储线性表的数据元素。同时也需要3个属性来描述:

1.存储空间的起始位置

2.线性表的最大存储容量

3.线性表的当前长度

其优点为:线性表中的元素可以随时存取

线性表的链式存储结构:用一组任意的存储单元存储线性表的数据元素,这组存储单元可以是连续的也可以是不连续的。

链式结构除了存储数据本身的信息外,还需存储一个指示其直接后继的信息,单链表的第一个节点称为头结点,可以不存储任何信息。

链表结构:

   1,静态链表:用数组实现,改进了顺序结构中存取需要移动大量元素的缺点,但是失去了存取随机的特性

   2,循环链表:将单链表的终端节点的指针指向头结点,判空时p->next 不等于头结点,则循环没有结束

   3,双向链表:在单链表的每个节点中,在设置一个指向其前驱节点的指针域,但在插入和删除时,需要更改两个指针变量

链表中查询元素的时候不要用for 因为不知道会循环多少次,用while,用空间换时间

栈:是限定仅在表尾进行插入和删除操作的线性表,可以插入和删除的叫做栈顶,另一端叫做栈底,先进后出

栈顶指针top为-1时,栈为空栈。栈结构需要提前规划好空间,可以建两个栈公用空间,一个增长,一个消减。当两个栈顶指针相差为1时栈满

什么时候栈用链式存储?

 当在使用过程中元素变化不可预料,则用链栈,若变化在可控范围内,则用顺序栈。链栈的头指针就是栈顶指针。空就是top=NULL,  

栈是实现递归的最好结构

栈的应用:四则表达式求值。后缀式(逆波兰)表示法

  遇到左括号就进栈push(),遇到右括号就让栈顶的左括号出栈pop()。

队列(queue)只允许在一端进行插入操作,另一端进行删除操作的线性表。

循环队列有两个指针:front和rear,当front 等于rear时,是空队列

循环队列满的条件是:(rear+1)%QueueSize ==front

计算队列长度的是:(rear-front+QueueSize)%QueueSize





你可能感兴趣的:(数据结构知识汇总1:线性表,栈和队列)