栈和队列
栈的顺序存储实现1234567891011121314151617181920#define STACK_INIT_SIZE 80#DEFINE STACK_INCREMENT 10typedef struct{ elemtype *base; elemtype *top; int stacksize;//栈长度(有多少元素),不是sizeof}SqStack;Sqstack s;Status StackInit (Sqstack *s) //传入结构体指针变量{ if(!(s->base = (elemtype*)malloc(sizeof(elemtype)*STACK_INIT_SIZE))) //对于线性表,分配内存空间是给L直接分配,因为L自身的含义就是头指针的地址,并且线性表是多个结构体指针变量连起来的,而对于顺序栈来说,他只有一个正常的结构体,结构体里面才包含头尾指针,所有的操作都是在这个结构体内部,使用这一个结构体的成员变量完成的 return ERROR; s->top = ...
函数参数中有链表时,对&符号的理解与讨论
先说结论:L和 副本L 本身的地址是一个存储自身的地方,二者不同,但是这两个变量所储存的地址都是链表的头节点,
因此可以可以通过修改副本l->next来修改原l头节点的指向,
但是如果想要改变头节点自身的地址,如果不加&符号,那就相当于修改了副本l所储存的地址,原l不受影响
关键点:不要错误的以为 函数中的l->next 是由副本l记录的,实际上这个是由头结点记录的,副本l指向的地址实际上是记录了头结点的地址
L 和副本 L 本身是存储地址的变量:
L 和它的副本 L 是两个不同的指针变量,它们本身(即 L 和副本 L)存在于不同的内存地址中。
但是,它们存储的值是相同的,都存储了链表头节点的地址(比如说地址 3)。也就是说,无论是 L 还是副本 L,它们指向的是同一个链表节点,这是链表头节点的地址。
2. L->next 是链表节点的成员:
L->next 存储的是链表中下一个节点的地址。这个成员属于链表头节点,所以无论你是通过原始的 L 还是副本 L 来访问 L->next,你修改的都是同一个链表节点的 next 成员。
3. **修改 L ...
线性表
复习
各个循环次数相乘,内层为n,外层为log2n,所以答案是nlog2n
线性表的类型定义线性表是n个类型相同的数据元素的有限序列
存在唯一的第一元素/最后元素,除第一元素外,其他元素均有唯一后继,除最后元素外,其他元素都有唯一前驱
小记 : c++中引入了引用类型 & ,用法是 b = &a ,代表b引用a,二者共用储存空间,在传入参数的时候,直接传入实参即可,不用加取地址符
如swap(a,b),但是函数在定义的时候,要把形参定义为引用类型 如 void swap(&a,&b),让传入的实参直接被形参引用
顺序线性表的插入操作算法给三个参数,一个是sqlist类线性表地址&L,一个整数i代表要插入的位置,一个类型e代表要插入的数据
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950Status ListInsert(sqlist &L,int i,elementtype e)& ...
树和二叉树
二叉树的性质
n = n0 + n1 +n2
n0 = n2 +1
n-1 = n1 + 2*n2(总度数为n-1)
满二叉树: 满的
完全二叉树:现有的节点编号和满二叉树的一致
具有n个结点的完全二叉树的深度为
已知编号i,求双亲的编号?(完全二叉树)
i/2 向下取整
已知编号i,左孩子的节点是2i,右孩子是2i+1
二叉树的存储结构顺序存储结构
链式存储结构
n个结点的二叉树链式存储中,共有n+1个空指针域证明:n个结点的二叉树,除了根节点以外,其余的结点都有上一个双亲结点指来的指针,因此一共有n-1个指针域被利用,所以剩下了n+1个指针域为空
二叉链表缺点:很难找到双亲结点带双亲指针的二叉链表(三叉链表)
遍历二叉树遍历的递归算法
遍历的非递归算法先序遍历先序遍历:相当于第一次遇到元素就直接遍历
12345678910111213141516171819202122void PreOrder(BiTNode *root){ BiTNode *p,*node[MAX]; //p用来更新当前指向的 ...
数组广义表
123456//二维数组A[b1][b2]中元素Aij的起始地址为:LOC[i,j]=LOC[0,0]+(b2*i+j) L//三维数组A[b1][b2][b3]中数据元素A[i][j][k]的起始地址为:LOC[i,j,k]=LOC[0,0,0]+(b2*b3*i+b3*j+k)*L
矩阵的压缩存储特殊矩阵上下三角矩阵:利用矩阵的特殊结构进行降维存储
对称矩阵:存在降维的下三角矩阵里,然后对称映射
稀疏矩阵
三元组表示:只存储非零元素的 行 列 值
代码实现
1234567891011121314#define MAXSIZE 12500typedef struct{ int i,j; //row and column ElementType e; //value}Triple_node;typedef struct{ Tripe_node [MAXSIZE+1]; int mu ,nu ,tu;}TSMatrix;TSMartix M;
矩阵的压缩存储三元组的转置普通方法:最后一列代表元素的值,不变——& ...
