线性表
头指针和头结点
头指针:通常用来标识一个单链表,头指针为NULL时表示一个空表
单链表第一个结点之前附加一个结点,为头结点,指针域指向线性表的第一个元素结点。
区分:不管带不带头结点,头指针都始终指向链表的第一个结点,而头结点是带头结点的链表中的第一个结点,通常不存储信息。
如果有头结点,头指针就指向头结点。
L=(LinkList)malloc(sizeof(LNode));
L为头结点地址。
所以 带头结点的双循环链表L为空的条件是:
L->prior==L && L->next==L
疑惑1:给定有n个元素的一维数组,建立一个有序的单链表的最低时间复杂度是:O(nlogn)
当一维数组有序时,时间复杂度最低,为O(n)
静态链表用于需要较大储存空间的情况(个人觉得是需要预先分配的情况下)
题目:需要分配较大空间,插入和删除不需要移动元素的线性表,其存储结构为:静态链表
不是单链表的原因猜想:单链表动态分配内存,大概会分配堆栈空间,而静态链表可以定义在外部,存放在静态区,可以分配更大的空间
栈和队列
栈
若一个栈的输入序列是P1,P2,...Pn,输出序列是1,2,3,...,n,若P3=1,则P1的值 不可能是2.
一个栈的入栈序列为1,2,3,...,n,出栈序列是P1,P2,P3,...,Pn。若P2=3,则P3可能取值的个数是 n-1
P2为3时,P1有三种可能
P1=1,P2=3,则P3=2或4...n
P1=2,P2=3,则P3=1或4...n
P1=4,P2=3,则P3=2或5...n
做并运算,得到P3可能的取值为1,2,4,5...n,共n-1个。
队列
队列定义中的MaxSize,为队列中元素的最大个数。当用链表实现队列且牺牲一个单元时,计算队满队空等条件时,无需将MaxSize-1。
链式储存结构,front->a1->a2->...->an,rear指向an。rear删除,front插入(和链表箭头顺序相反)。
最适合用作链队的链表时 带队首指针和队尾指针的非循环单链表。(非循环单链表相比循环单链表在插入和删除时要少操作几次next和prior的更改)
应用
中缀表达式转换成后缀表达式
期待讨论